Demi diskusi, saya akan memunculkan kelas dari JUCE bernama AudioSampleBuffer . Sekarang kelas ini ada untuk menyimpan potongan (atau mungkin potongan yang agak panjang) dari audio. Ia tahu jumlah saluran, jumlah sampel (per saluran), tampaknya berkomitmen untuk float IEEE 32-bit daripada memiliki representasi numerik variabel atau wordsize (tapi itu tidak masalah dengan saya). Ada fungsi anggota yang memungkinkan Anda untuk mendapatkan numChannels atau numSamples dan pointer ke saluran tertentu. Anda dapat membuat AudioSampleBuffer lebih lama atau lebih pendek. Saya menganggap yang pertama nol-bantalan buffer sementara yang kedua memotong.
Ada beberapa anggota pribadi dari kelas ini yang digunakan untuk mengalokasikan ruang di tumpukan khusus yang digunakan JUCE.
Tetapi inilah yang tidak ada pada AudioSampleBuffer (dan saya telah melakukan beberapa diskusi dengan Jules tentang hal itu): seorang anggota menelepon SampleRate
. Bagaimana bisa melewatkan itu?
Tanggung jawab tunggal yang harus dipenuhi oleh AudioSampleBuffer adalah merepresentasikan audio fisik yang didengar oleh sampel. Saat Anda memasukkan AudioSampleBuffer dari sesuatu yang membaca file suara atau dari aliran, ada parameter tambahan yang harus Anda dapatkan dan meneruskannya bersama AudioSampleBuffer ke metode pemrosesan (katakan itu filter) yang perlu mengetahui laju sampel atau, akhirnya, ke metode yang memutar buffer keluar untuk didengar (atau streaming ke tempat lain). Terserah.
Tapi yang harus Anda lakukan adalah terus meneruskan SampleRate ini, yang melekat pada kehidupan audio tertentu di AudioSampleBuffer, berkeliling ke mana-mana. Saya telah melihat kode di mana 44100.0f konstan dilewatkan ke suatu fungsi, karena programmer tampaknya tidak tahu harus berbuat apa lagi.
Ini adalah contoh kegagalan memenuhi tanggung jawab tunggal.