あなたの質問は、「誰かが私に魚の釣り方法を説明できるか」のようなものです。非常に多くの方法があり、多くのツールがあり、それぞれの答えは技術的には正しいものの、トローラーを操作する人から、フライフィッシャー、スピアフィッシャーまで、答える人の答えを示すだけです。
Audio on linuxは、ワイルドウエストの水のようなテーマです。「ウイスキーは飲み物に、水は戦うためのもの」です。ちょうど楽しみのための複雑さの考え方については、以下のリンクを試してみてください :
https://ubuntuforums.org/showthread.php?t=843012
http://alsa.opensrc.org/MultipleCards
しかし、あなたがコマンドラインから実行することができます(と書くことができる「トーン」の例を与えるために、コード、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()
一度に2つの周波数を再生する方法はありますか? – Chromium
最も単純な方法では、self.playerと同じ方法でself.player2を作成します。これにより、結合された出力が得られます。私はおそらく左右に分ける方法があると思いますが、あなた自身の研究をする必要があります。 –
'audioconv'と' audiosink'の使い方は? – Chromium