Stereo “generator nada” untuk linux?


13

Apakah ada sesuatu seperti generator nada stereo (saluran kiri dan kanan terpisah) untuk Linux? Di mana Anda dapat mengatur volume dan nada / nada untuk setiap saluran, dan lebih disukai juga mengatur bentuk gelombang (sinus, persegi, gigi gergaji, ...) dan membalikkan satu saluran (berlawanan dengan yang lain).

Jika tidak, ada ide untuk memulai tempat yang bagus? Saya kira yang paling sederhana adalah dengan mengadaptasi program yang ada seperti synths ... Tetapi jika itu bekerja dengan buruk, apakah ada perpustakaan (seperti SDL?) Yang dapat digunakan sebagai basis untuk program seperti itu?


Anda mungkin bisa menyelesaikannya dengan sox.
Renan

Jawaban:


15

Sepertinya Anda mencari Audacity yang merupakan editor audio open source lintas platform. Salah satu fiturnya adalah untuk memungkinkan Anda menghasilkan nada. Ini adalah editor audio multi-track, sehingga Anda dapat dengan mudah membuat nada stereo.

Di bawah Generatemenu, Anda dapat membuat nada gelombang Sine, Sawtooth, dan Square dengan frekuensi acak, amplitudo, dan panjang tanpa perlu merekam atau memerlukan file input tambahan.


Tapi bisakah itu menghasilkan nada "dari nol"? Dan saya tidak bermaksud merekam dan memutar apa pun, hanya menghasilkan dua nada yang sedikit berbeda (satu untuk setiap saluran) "untuk selamanya".
Baard Kopperud

1
@ BaardKopperud Ya, saya memperbarui jawaban saya untuk menjelaskan.
j883376

8

Anda mungkin melihat speaker-test, yang (pada mesin Arch) saya temukan dalam paket alsa-utils.

speaker-test -c2 -t sinelari dari xterm, memberi saya gelombang sinus 440 Hz untuk masing-masing sekitar 6 detik, bergantian speaker kiri dan kanan. Dalam xterm, ia memberikan beberapa informasi tentang pembicara mana yang ia pikir ia gunakan.

Menurut halaman manual, itu dapat melakukan gelombang sinus frekuensi acak dan noise pink.


1
speaker-test -c2 -t sine -f 440akan melengkapi contoh Anda dengan memberikan parameter frekuensi. Terima kasih.
christian

4

The siggenProgram harus melakukan trik.

tangkapan layar siggen

Ini memiliki dua saluran dengan sinyal independen dan fase di antara mereka. Setiap saluran dapat melakukan jenis sinyal ini:

  • sinus
  • kosinus
  • kotak
  • segi tiga
  • gigi gergaji
  • nadi
  • kebisingan

Anda dapat menjalankannya dalam mode stereo seperti ini:

$ siggen -2

Karena /dev/dspsudah usang di sebagian besar distro Linux modern, Anda mungkin perlu menginstal pustaka kompatibilitas. Pada distro berbasis Debian , instal alsa-osspaket dan jalankan seperti ini:

$ aoss siggen -2

Anda juga dapat mencobanya dengan PulseAudio OSS Wrapper:

$ padsp siggen -2

Saya mendapatkan: [siggen] Kesalahan input / output: / dev / dsp
Ole Tange

Hm Apakah pembungkus PulseAudio OSS membantu sama sekali?
Nathaniel M. Beaver

Ya. Itu berhasil.
Ole Tange

2

ffmpeg

ffmpeg dapat melakukannya, seperti biasa.

Buat out.wavfile suara sinusoidal mono 1000Hz 5 detik :

sudo apt-get install ffmpeg
ffmpeg -f lavfi -i "sine=frequency=1000:duration=5" out.wav

Stereo sebagai gantinya:

ffmpeg -f lavfi -i "sine=frequency=1000:duration=5" -ac 2 out.wav

File akan menjadi 2x lebih besar, dan ffprobeakan mengatakan itu 2 channelsbukan 1 channel.

Putar audio selama 5 detik tanpa membuat file:

ffplay -f lavfi -i "sine=frequency=1000:duration=5" -autoexit -nodisp

Mainkan selamanya sampai Anda menjadi gila:

ffplay -f lavfi -i "sine=frequency=1000" -nodisp

Dokumentasi:

Bagian lain di bawah sumber Audio mendokumentasikan algoritma generasi suara lain yang berguna selain sine, misalnya:

  • anoisesrc: suara beberapa warna, misalnya putih, merah muda, coklat
  • aevalsrc mengambil ekspresi matematika sewenang-wenang, dan karena itu harus dapat menghasilkan bentuk gelombang segitiga (ekspresi TODO)

Bibliografi:

Diuji di Ubuntu 18.04, ffmpeg 3.4.6.

Contoh generasi audio C minimal tanpa perpustakaan tambahan

Hanya untuk bersenang-senang: /programming/732699/how-is-audio-represented-with-numbers-in-computers/36510894#36510894


1

Program saugns juga dapat melakukannya. (Ini adalah generator audio baris perintah (saat ini) mendukung 8 jenis gelombang dan teknik modulasi FM / PM / AM.)

Untuk menghasilkan dua gelombang 100 Hz yang dipisahkan stereo, satu a sinus dan satu a segitiga, dan satu dengan amplitudo terbalik, skrip berikut dapat disisipkan ke dalam file dan dijalankan melalui program (seperti pada ./saugns filename):

Osin f100 a0.5 t2 P0
Otri f100 a(-0.5) t2 P1

The ts menentukan waktu, dalam detik.

The Ps adalah untuk panning per-suara (0,0 = kiri, 1,0 = kanan). Ini dapat diubah menjadi sesuatu selain dari Pversi yang akan datang; file README menjelaskan sintaksis saat ini.

Sunting: Saya memang pengembang program.

Juga, cara alternatif membalik amplitudo (untuk beberapa jenis gelombang, misalnya sintetapi tidak saw), adalah mengatur fase menggunakan huruf kecil p. Menambahkan p0.5fase set ke 50% dari siklus gelombang (setengah negatif). Lebih lanjut, karena tidak ada tipe cosinus bernama, p0.25adalah cara untuk mengubah sinus menjadi cosinus (atau p0.75untuk cosinus negatif).


Hai Joel. Selamat datang di Unix & Linux . Saya telah mengangkat jawaban Anda karena ini adalah posting pertama yang bagus. Saya pikir saya akan menyebutkan bahwa jika Anda adalah pengelola atau pengembang proyek, itu praktik standar untuk mengungkapkan informasi ini. Meskipun tidak benar-benar masalah untuk perangkat lunak GPL, ada baiknya waspadai unix.stackexchange.com/help/promotion Untuk perangkat lunak Free / Libre yang berguna, saya akan membayangkan bahwa Anda akan lebih besar kemungkinannya untuk diangkat di situs ini jika pengguna tahu Anda adalah salah satu pengembang di balik proyek ini.
Anthony Geoghegan mulai

0

Anda mungkin mencari Gnaural .


3
Akan lebih baik untuk mengedit jawaban ini untuk memasukkan lebih banyak informasi tentang bagaimana program ini menyediakan fitur yang ditanyakan - mirip dengan jawaban lain yang diposting sebelumnya.
Anthony Geoghegan

0

Anda dapat dengan mudah mensintesis nada dengan SoX. Ada beberapa batu sandungan tetapi saya akhirnya bisa mengetahuinya.

Saya mengalami kesulitan menghubungkan SoX dengan PulseAudio jadi saya hanya menyalurkan soxdata mentah ke paplay.

Pipanya membosankan, jadi saya membuat skrip:

$ cat sox-paplay
#!/bin/bash
: ${HZ:=44100}
: ${NCHAN:=6}
: ${SINK:=mysink}
sox -c $NCHAN -n -t raw -r $HZ -L -b 16 - "$@" | paplay --no-remix --no-remap --raw -v -p --rate $HZ -d $SINK --channels $NCHAN

misalnya

sox-paplay synth sine 1000 gain -5 remix -m 0 0 1 0 0 0

The remixefek hanya digunakan untuk mengirim hasilnya ke saluran tertentu. Ini jauh lebih kuat tetapi kami hanya menggunakan fungsionalitas dasar di sini. Dalam contoh ini kami memiliki perangkat enam saluran dan kami mengirim nada ke saluran ketiga.

Saya awalnya membuat perangkat ALSA yang membungkus perangkat PulseAudio, tetapi kemudian saya menemukan bahwa tidak mungkin untuk mengontrol pemetaan saluran menggunakan ALSA, dan karenanya saluran acak digabungkan bersama-sama sesuai dengan bagaimana peta saluran kustom saya berbeda dari standar ALSA. Inilah sebabnya saya punya --no-remix --no-remapdi paplayatas; Saya hanya ingin memesan saluran mentah untuk perintah sox.

Saya agak berharap barang audio di Linux memiliki dokumentasi dan pelaporan kesalahan yang lebih baik.

Anda mungkin tertarik dengan jawaban yang saya posting baru-baru ini yang menunjukkan cara mengatur PulseAudio Equalizer dari baris perintah .

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.