Chỉ để thảo luận, tôi sẽ mở ra một lớp học từ JUCE có tên là AudioSampleBuffer . Bây giờ lớp này tồn tại để giữ một đoạn (hoặc có lẽ là một đoạn khá dài) của âm thanh. Nó biết số lượng kênh, số lượng mẫu (trên mỗi kênh), dường như được cam kết với float float 32 bit thay vì có biểu diễn số hoặc biến đổi số (nhưng đó không phải là vấn đề với tôi). Có các hàm thành viên cho phép bạn lấy numChannels hoặc numSamples và con trỏ tới bất kỳ kênh cụ thể nào. Bạn có thể làm cho AudioSampleBuffer dài hơn hoặc ngắn hơn. Tôi đoán rằng phần đệm trước không đệm trong khi phần sau cắt ngắn.
Có một vài thành viên riêng của lớp này được sử dụng để phân bổ không gian trong đống đặc biệt mà JUCE sử dụng.
Nhưng đây là thứ mà AudioSampleBuffer đang thiếu (và tôi đã có vài cuộc thảo luận với Jules về nó): một thành viên được gọi SampleRate
. Làm thế nào nó có thể thiếu nó?
Trách nhiệm duy nhất mà AudioSampleBuffer cần thực hiện là thể hiện đầy đủ âm thanh vật lý mà người ta nghe thấy các mẫu của nó đại diện. Khi bạn nhập AudioSampleBuffer từ thứ gì đó đọc tệp âm thanh hoặc từ luồng, có một tham số bổ sung mà bạn phải nhận và chuyển nó cùng với AudioSampleBuffer cho các phương thức xử lý (giả sử đó là bộ lọc) cần biết tốc độ mẫu hoặc, cuối cùng, đến một phương pháp mà đóng bộ đệm ra được lắng nghe (hoặc suối nó một nơi nào đó khác). Bất cứ điều gì.
Nhưng những gì bạn phải làm là tiếp tục vượt qua SampleRate này, vốn có với âm thanh cụ thể sống trong AudioSampleBuffer, ở khắp mọi nơi. Tôi đã thấy mã trong đó một hằng số 44100.0f được truyền cho một hàm, bởi vì lập trình viên dường như không biết phải làm gì khác.
Đây là một ví dụ về việc không đáp ứng trách nhiệm duy nhất của nó.