使用AudioTrack时,设置的属性需要和录制文件时设置的属性相同。 还有,录制时的recBufSize(你贴的代码里的变量) 是由AudioRecord生成的吧(参考书代码) int frequency=11025; int channelConfig=AudioFormat.CHANNEL_CONFIGURATION_MONO;//貌似被弃用,值是2 int audioFormat=AudioFormat.ENCODING_PCM_16BIT; //三个参数为:frequency频率、channelConfig音频编码、audioFormat声道编码 int bufferSize=AudioRecord.getMinBufferSize(frequency, channelConfig, audioFormat);
使用AudioTrack时,设置的属性需要和录制文件时设置的属性相同。 还有,录制时的recBufSize(你贴的代码里的变量) 是由AudioRecord生成的吧(参考书代码) int frequency=11025; int channelConfig=AudioFormat.CHANNEL_CONFIGURATION_MONO;//貌似被弃用,值是2 int audioFormat=AudioFormat.ENCODING_PCM_16BIT; //三个参数为:frequency频率、channelConfig音频编码、audioFormat声道编码 int bufferSize=AudioRecord.getMinBufferSize(frequency, channelConfig, audioFormat); 是的。我定义的recBufSize是这样的:private int recBufSize = AudioRecord.getMinBufferSize(fre,channelConfiguration,audioEncoding);public void Play() throws Exception { boolean isPlaying = true; //String dir = Environment.getExternalStorageDirectory().getAbsolutePath()+"/xz.pcm"; int mAudioMinBufSize = AudioTrack.getMinBufferSize(8000,AudioFormat.CHANNEL_CONFIGURATION_STEREO, AudioFormat.ENCODING_PCM_16BIT); int bufferSize = AudioTrack.getMinBufferSize(fre, channelConfiguration, audioEncoding); short[] buffer = new short[bufferSize]; try { File dir = new File (Environment.getExternalStorageDirectory().getAbsolutePath()+"/xz.pcm"); InputStream is = new FileInputStream(dir); DataInputStream dis = new DataInputStream(new BufferedInputStream(is)); AudioTrack track = new AudioTrack(AudioManager.STREAM_MUSIC,fre,channelConfiguration,audioEncoding,mAudioMinBufSize,AudioTrack.MODE_STREAM);
还有,录制时的recBufSize(你贴的代码里的变量)
是由AudioRecord生成的吧(参考书代码) int frequency=11025;
int channelConfig=AudioFormat.CHANNEL_CONFIGURATION_MONO;//貌似被弃用,值是2
int audioFormat=AudioFormat.ENCODING_PCM_16BIT;
//三个参数为:frequency频率、channelConfig音频编码、audioFormat声道编码
int bufferSize=AudioRecord.getMinBufferSize(frequency, channelConfig, audioFormat);
还有,录制时的recBufSize(你贴的代码里的变量)
是由AudioRecord生成的吧(参考书代码) int frequency=11025;
int channelConfig=AudioFormat.CHANNEL_CONFIGURATION_MONO;//貌似被弃用,值是2
int audioFormat=AudioFormat.ENCODING_PCM_16BIT;
//三个参数为:frequency频率、channelConfig音频编码、audioFormat声道编码
int bufferSize=AudioRecord.getMinBufferSize(frequency, channelConfig, audioFormat);
是的。我定义的recBufSize是这样的:private int recBufSize = AudioRecord.getMinBufferSize(fre,channelConfiguration,audioEncoding);public void Play() throws Exception
{
boolean isPlaying = true;
//String dir = Environment.getExternalStorageDirectory().getAbsolutePath()+"/xz.pcm";
int mAudioMinBufSize = AudioTrack.getMinBufferSize(8000,AudioFormat.CHANNEL_CONFIGURATION_STEREO, AudioFormat.ENCODING_PCM_16BIT);
int bufferSize = AudioTrack.getMinBufferSize(fre, channelConfiguration, audioEncoding);
short[] buffer = new short[bufferSize];
try
{
File dir = new File (Environment.getExternalStorageDirectory().getAbsolutePath()+"/xz.pcm");
InputStream is = new FileInputStream(dir);
DataInputStream dis = new DataInputStream(new BufferedInputStream(is));
AudioTrack track = new AudioTrack(AudioManager.STREAM_MUSIC,fre,channelConfiguration,audioEncoding,mAudioMinBufSize,AudioTrack.MODE_STREAM);
track.setStereoVolume(1.0f, 1.0f);
track.play();
while(isPlaying && dis.available()>0)
{
int i = 0;
while(dis.available()>0 && i<buffer.length)
{
buffer[i] = dis.readShort();
i++;
}
//播放声音关键
track.write(buffer, 0, buffer.length);
}
track.stop();
track.release();
dis.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}这是我的播放代码,请看看有什么问题吗?
http://download.csdn.net/detail/inquisitive_plus/8402049