Android:混合多个AudioTrack实例?

我需要同时运行两个AudioTrack实例。它们必须单独运行,因为我以不同的可变采样率播放它们。我发现,如果我在同一线程中运行它们,它们将“轮流”运行。我在各自的线程中运行它们,但是音频断断续续。

关于使两个实例更好玩的任何想法?如果没有,那么即使我想以不同的采样率播放两个短缓冲区,也有一些技巧将它们混合在一起。

回答:

我有4个音轨同时播放,它们似乎播放得很好。在HTC Desire 1.1ghz

OC上进行测试。我有时会在穿线时遇到小故障。有时,如果所有四个都在播放,则在我尝试加入该线程时不会停止。需要做更多的测试。这是我的课程,用于播放在给定路径下记录的WAV文件

    package com.ron.audio.functions;

import java.io.BufferedInputStream;

import java.io.DataInputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.InputStream;

import android.media.AudioFormat;

import android.media.AudioManager;

import android.media.AudioTrack;

public class AudioPlayManager implements Runnable {

private File fileName;

private volatile boolean playing;

public AudioPlayManager() {

super();

setPlaying(false);

}

public void run(){

// Get the length of the audio stored in the file (16 bit so 2 bytes per short)

// and create a short array to store the recorded audio.

int musicLength = (int)(fileName.length()/2);

short[] music = new short[musicLength];

try {

// Create a DataInputStream to read the audio data back from the saved file.

InputStream is = new FileInputStream(fileName);

BufferedInputStream bis = new BufferedInputStream(is);

DataInputStream dis = new DataInputStream(bis);

// Read the file into the music array.

int i = 0;

while (dis.available() > 0) {

music[i] = dis.readShort();

i++;

}

// Close the input streams.

dis.close();

// Create a new AudioTrack object using the same parameters as the AudioRecord

// object used to create the file.

AudioTrack audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC,

11025,

AudioFormat.CHANNEL_CONFIGURATION_MONO,

AudioFormat.ENCODING_PCM_16BIT,

musicLength,

AudioTrack.MODE_STREAM);

// Start playback

audioTrack.play();

// Write the music buffer to the AudioTrack object

while(playing){

audioTrack.write(music, 0, musicLength);

}

}

catch(Exception e){

e.printStackTrace();

}

}

public void setFileName(File fileName) {

this.fileName = fileName;

}

public File getFileName() {

return fileName;

}

public void setPlaying(boolean playing) {

this.playing = playing;

}

public boolean isPlaying() {

return playing;

}

}

以上是 Android:混合多个AudioTrack实例? 的全部内容, 来源链接: utcz.com/qa/421773.html

回到顶部