Saya tidak sengaja lupa mengonversi beberapa array NumPy menjadi objek byte saat menggunakan PyAudio, tetapi yang mengejutkan saya, itu masih memutar audio, meskipun kedengarannya agak tidak aktif. Saya menulis skrip pengujian kecil (lihat di bawah) ...

1
BatWannaBe 5 April 2021, 23:40

1 menjawab

Jawaban Terbaik

Masalahnya lebih halus dari yang Anda gambarkan. Panggilan pertama Anda melewati array byte berukuran 192.000. Panggilan kedua melewati daftar nilai float32 dengan ukuran 48.000. pyaudio menangani keduanya, dan meneruskan buffer ke portaudio untuk dimainkan.

Namun, ketika Anda membuka pyaudio, Anda memberi tahu bahwa Anda mengirim paFloat32 data, yang memiliki 4 byte per sampel. Handler pyaudio write mengambil panjang larik yang Anda berikan, dan membaginya dengan jumlah saluran dikalikan ukuran sampel untuk menentukan berapa banyak sampel audio yang ada. Dalam panggilan kedua Anda, panjang larik adalah 48.000, yang dibagi 4, dan dengan demikian memberi tahu portaudio "ada 12.000 sampel di sini".

Jadi, semua orang mengerti formatnya, tetapi bingung tentang ukurannya. Jika Anda mengubah panggilan kedua ke

stream.write(sina, 48000)

Maka tidak ada yang harus menebak, dan itu bekerja dengan baik.

2
Tim Roberts 5 April 2021, 21:24