Tôi đã tạo một ứng dụng đơn giản tạo ra một làn sóng vuông tần số đã cho và phát nó bằng cách sử dụng AudioTrack ở chế độ STREAM (STREAM_MUSIC). Tất cả mọi thứ dường như được làm việc tốt và âm thanh đóng okay, tuy nhiên khi dòng xong tôi nhận được tin nhắn trong nhật ký:AudioTrack khởi động lại ngay cả sau khi nó dừng lại
W/AudioTrack (7579): obtainBuffer() theo dõi 0x14c228 tàn tật, khởi động lại ...
Ngay cả sau khi gọi hàm stop(), tôi vẫn nhận được các giá trị này. Tôi tin rằng tôi đã đặt đúng kích thước bộ đệm AudioTrack, dựa trên kích thước tối thiểu theo yêu cầu của AudioTrack (trong trường hợp của tôi là 6x1024). Tôi ăn nó với bộ đệm nhỏ hơn 1024 quần short.
Tôi có nhận được những điều này hay không và tôi có nên để nó như thế không?
Đó là điểm - điền bộ đệm với dữ liệu trước khi gọi vở kịch. Sau đó, đảm bảo bạn có thể tạo dữ liệu đúng lúc. Bạn sẽ có độ trễ và nó phụ thuộc vào điện thoại của bạn (kích thước bộ đệm tối thiểu), tỷ lệ mẫu và độ phân giải động mà bạn sử dụng. Im trường hợp của tôi (HTC Desire) 6kB. Đây là khoảng 3000 mẫu đơn 16 bit. Bạn có thể dễ dàng tính toán độ trễ kết quả khi tính tỷ lệ mẫu vào tài khoản. Nếu bạn sử dụng API âm thanh gốc, bạn có thể nhận được độ trễ nhỏ hơn nhiều, nhưng vẫn còn xa 5ms nhỏ của iPhone ... –