2012-06-29 37 views
17

Tôi hiện đang có âm thanh PCM ở dạng mảng byte. Định dạng được ký 16 bit chút cuối. Tôi muốn chuyển đổi điều này sang một số định dạng có thể phát trên Android, tốt nhất là phiên bản 3.2 hoặc cao hơn. Có ai có đề xuất về cách này có thể được thực hiện? Tôi đã thực hiện một số nghiên cứu và thử những điều sau đây, nhưng không có nghiên cứu nào thành công. Nó sẽ được đánh giá cao nếu bất cứ ai có thể đề xuất một cách tốt hơn hoặc chỉ ra nơi tôi đã đi sai.PCM byte thực [] Để âm thanh trên Android

Tôi đã thử tạo một AudioFormat với cài đặt âm thanh chính xác, tuy nhiên Android không hỗ trợ thư viện javax.sound.sampled.

Tôi cũng đã cố gắng ghi dữ liệu PCM vào tệp sóng, nhưng tôi gặp sự cố khi nhận tất cả thông tin tiêu đề wav cần thiết.

Tôi cũng đã thử sử dụng lớp AudioTrack do Android cung cấp để phát dữ liệu PCM. Tuy nhiên, tôi không thể nghe thấy bất kỳ âm thanh nào. Đây là phương pháp của tôi:

public void playback(){ 
     try{ 
       AudioTrack audioTrack = new AudioTrack(AudioManager.STREAM_VOICE_CALL, 8000, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT, 500000, AudioTrack.MODE_STATIC); 
       audioTrack.write(audio, 0, 500000); 

     } catch(Throwable t){ 
     Log.d("Audio","Playback Failed"); 
    } 
} 

Mọi đề xuất sẽ được đánh giá cao.

+0

đã cập nhật câu trả lời của tôi –

Trả lời

19

http://developer.android.com/reference/android/media/AudioTrack.html

Lớp này có vẻ như nó có chính xác những gì bạn cần!

write(byte[] audioData, int offsetInBytes, int sizeInBytes) 

Ghi dữ liệu âm thanh vào phần cứng âm thanh để phát lại.

EDIT

Thay đổi luồng của mình để AudioManager.STREAM_MUSIC

+0

Cảm ơn bạn đã hướng dẫn tôi khắc phục luồng. Điều này góp phần sửa lỗi. – ShannonS

+6

Vui lòng chọn câu trả lời đúng, nó sẽ giúp bạn nhận được nhiều câu trả lời hơn trong tương lai. –

17

Câu hỏi đặt ra là liệu bạn muốn chơi mẫu PCM bạn nhận được từ một số nguồn trực tiếp trong ứng dụng Android hoặc nếu bạn có một số tập tin bên ngoài bạn cần đổi. Trong trường hợp đầu tiên đi theo cách như jack57 mô tả. Nó thực sự dễ dàng và bạn thậm chí có thể thêm đánh dấu để có thời gian chính xác.

int bufferSize = AudioTrack.getMinBufferSize(sampleRate, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT); 

AudioTrack mAudioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, sampleRate, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT, bufferSize, AudioTrack.MODE_STREAM); 

mAudioTrack.play(); 

sau đó gọi phương pháp ghi trong một chu kỳ:

mAudioTrack.write(buffer, 0, buffer.length); 

Trong trường hợp thứ hai chỉ cần sử dụng một số biên tập âm thanh miễn phí: http://audacity.sourceforge.net/download/. Bạn có thể lưu trữ mẫu PCM dưới dạng tệp .txt, mở tệp đó trong trình chỉnh sửa và lưu ở định dạng bạn cần ...

+0

Cảm ơn bạn đã xây dựng. Điều này đã giúp tôi sửa lỗi. – ShannonS

Các vấn đề liên quan