Во многом ваш вопрос похож на «кто-нибудь может объяснить мне, как ловить рыбу?». Существует так много способов и так много доступных инструментов, что каждый ответ, хотя и технически правильный, просто иллюстрирует то, как это делает человек, который работает на траулере, через нахлыстовика до подводного рыболова.
Аудио в linux это тема, как вода на Диком Западе: «Виски для питья, Вода для борьбы». Просто для удовольствия попробуйте следующие ссылки для представления сложности:
https://ubuntuforums.org/showthread.php?t=843012
http://alsa.opensrc.org/MultipleCards
Но чтобы дать вам пример «Tone», который может запускаться из командной строки (и может быть записан в код, Python и C наверняка), загрузите gstreamer-1.0 на свой компьютер и выполните следующее:
gst-launch-1.0 audiotestsrc freq=329.63 volume=0.5 ! autoaudiosink
gst-launch-1.0 audiotestsrc freq=987.77 ! autoaudiosink
gst-launch-1.0 audiotestsrc wave=2 freq=200 volume=0.2 ! tee name=t ! queue ! audioconvert ! autoaudiosink t. ! queue ! audioconvert ! libvisual_lv_scope ! videoconvert ! autovideosink
Затем проверьте:
https://gstreamer.freedesktop.org/documentation/plugins.html< /а>
Примечание: gstreamer — это просто история рыбака-нахлыстника, и это болтовня!
Вот некоторый код Gtk, с которым вы можете поиграть:
#!/usr/bin/env python
import gi
gi.require_version('Gst', '1.0')
from gi.repository import Gst, GObject, Gtk
class Tone(object):
def __init__(self):
window = Gtk.Window(Gtk.WindowType.TOPLEVEL)
window.set_title("Tone-Player")
window.set_default_size(500, 200)
window.connect("destroy", Gtk.main_quit, "WM destroy")
vbox = Gtk.VBox()
window.add(vbox)
self.tone_entry = Gtk.Entry()
self.tone_entry.set_text('300.00')
vbox.pack_start(self.tone_entry, False, False, 0)
self.button = Gtk.Button("Start")
vbox.add(self.button)
self.button.connect("clicked", self.start_stop)
window.show_all()
self.player = Gst.Pipeline.new("player")
source = Gst.ElementFactory.make("audiotestsrc", "tone-source")
audioconv = Gst.ElementFactory.make("audioconvert", "converter")
audiosink = Gst.ElementFactory.make("autoaudiosink", "audio-output")
self.player.add(source)
self.player.add(audioconv)
self.player.add(audiosink)
source.link(audioconv)
audioconv.link(audiosink)
def start_stop(self, w):
if self.button.get_label() == "Start":
self.button.set_label("Stop")
tone = float(self.tone_entry.get_text())
self.player.get_by_name("tone-source").set_property("freq", tone)
self.player.set_state(Gst.State.PLAYING)
else:
self.player.set_state(Gst.State.NULL)
self.button.set_label("Start")
GObject.threads_init()
Gst.init(None)
Tone()
Gtk.main()
person
Rolf of Saxony
schedule
23.08.2016