Articles of audiotrack

Android:如何使用OpenSL ES更改音乐的播放速率

我正在制作一个音乐播放器,我需要在不改变音高的情况下改变速度(音乐的播放速度)。 我无法find任何本机安卓类。 我试过SoundPool,但它不适用于大型音乐文件,它似乎也不适用于许多设备。 我也试过AudioTrack,但又没有运气。 现在我正在尝试使用OpenSL ES处理音乐的android NDK音频示例。 现在我只想在此示例中添加设置播放速率function。 任何人都可以告诉我如何在其中添加更改播放率function?

即时音频输入和输出Android

在我的Android应用程序中,我想从智能手机的麦克风中获取一些音频并立即播放,像麦克风一样直播,没有延迟。 我目前正在考虑使用AudioRecord和AudioTrack类(从我读过的内容),但我不太清楚如何继续。 我查看了Stack Overflow上的其他一些问题,但是他们并没有完全回答我想做的事情。 大多数是2012年。 那么如何使用这些类同时输入和输出音频呢? 另外:我看过MediaRecorder API ,但是根据我的阅读,这需要你将音频保存到文件中,我不想这样做。 可以通过tweek来满足我的要求吗? 或者我最好只使用AudioRecord ? 谢谢 编辑: 以下是我在@Pradip Pramanick建议的更新代码: final Thread record = new Thread(new Runnable() { @Override public void run() { while (!Thread.interrupted()) { MediaRecorder microphone = new MediaRecorder(); microphone.setAudioSource(MediaRecorder.AudioSource.MIC); microphone.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); microphone.setOutputFile(filename); microphone.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); try { microphone.prepare(); } catch (IOException e) { e.printStackTrace(); } microphone.start(); } } }); […]

PCM Raw Bytes 到Android上的音频

我目前有一个字节数组forms的PCM音频。 格式是16位小端的签名。 我想将它转换为Android上的一些可播放格式,最好是版本3.2或更高版本。 有人有关于如何做到这一点的建议吗? 我做了一些研究并尝试了下面的内容,但都没有成功。 如果有人能提出更好的方法或指出我出错的地方,我们将不胜感激。 我尝试使用正确的音频设置创建AudioFormat,但Android不支持javax.sound.sampled库。 我也尝试将PCM数据写入wave文件,但是我遇到了所有必要的wav头信息。 我也尝试使用Android提供的AudioTrack类来播放PCM数据。 但是,我似乎听不到任何声音。 这是我的方法: 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”); } } 任何建议,将不胜感激。

我应该使用AudioTrack,SoundPool还是MediaPlayer?

我需要播放多个音频文件,持续时间不同,比如5到30秒。 我想为右/左声道独立设置音量,也可以应用效果,如Reverb或Distortion。 那么,我应该使用哪种API? 另外,我在AudioTrack API上找不到太多的文档。 你知道我在哪里可以find例子吗? 谢谢。

客户拒绝了AUDIO_OUTPUT_FLAG_FAST

我收到了这个AudioTrack警告 AUDIO_OUTPUT_FLAG_FAST denied by client 在我的Android应用程序中的按钮我是子类。 点击按钮时我可以听到咔嗒声,这有什么值得担心的吗? 注意:我没有得到如此问题中的不匹配采样率消息:由于采样率不匹配,AudioTrack:AUDIO_OUTPUT_FLAG_FAST被客户拒绝

ExoPlayer AudioTrack Stuttering

我有自己的TrackRenderer实现,用于我集成的mp3解码器。 当棒棒糖设备进入待机状态并返回时,它并不总是可重复但音频开始断断续续,直到我强制停止应用程序。 一开始,我认为这是我实现的解码器,所以我尝试将口吃轨道与正常轨道之间的文件输出进行比较。 这些文件是相同的,然后我认为它可能需要很长时间来解码,所以我增加了缓冲区大小并调用了setPlayReady false,以便数据缓冲。 它像我没有停顿一样口吃。 我目前认为问题在于我的音轨实现或操作系统错误。 该错误仅发生在Lollipop设备上。 谢谢。 我的TrackRenderer使用与AudioTrackRenderer相同的工作流程,我自己的原生实现为mp3解码器而不是opus。

发出编码和解码audiologging为G711(PCMU – uLaw)格式

当我们需要stream式传输audio时,没有太多有关应用此编解码器的信息。 没有应用编解码器,我的代码就像一个build立2设备之间的通信魅力工作,但我需要在该格式的编码/解码,因为我需要stream服务器,而不是两个设备之间(我正在testing这个代码使用2设备)。 我正在寻找机会,如果你的任何人都可以看到我的问题的关键在哪里。 我已经尝试了input参数的不同configuration。 也许,我使用的编解码器是错误的(我使用Apache许可证从一个项目中获得了它们)。 这个值在播放器 – 接收器设备中设置在录音机 – 发送器中: private int port=50005; private int sampleRate = 8000 ;//44100; private int channelConfig = AudioFormat.CHANNEL_OUT_MONO; private int audioFormat = AudioFormat.ENCODING_PCM_16BIT; int minBufSize = AudioTrack.getMinBufferSize(sampleRate, channelConfig, audioFormat); 注意:播放器中的CHANNEL_OUT_MONO和logging器项目中的CHANNEL_IN_MONO。 这些是我的方法: public void startStreamingEncoding() { Thread streamThread = new Thread(new Runnable() { @Override public void run() { try { […]

使用AudioTrack与AudioManager setSpeakerphoneOn

我正在使用AudioTrack播放通过UDP套接字收到的声音。 我听到很多声音,所以我决定使用AudioManager。 但是,AudioManager改变了超出应用程序界限的声音路由。 以下是我正在使用的代码。 m_amAudioManager = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE); m_amAudioManager.setMode(AudioManager.MODE_IN_CALL); m_amAudioManager.setSpeakerphoneOn(false); 这个代码的问题是,当我closures应用程序并启动音乐播放器时,声音来自前置扬声器而不是后置扬声器,我无法改变它。 要解决此问题,我决定在closures我的应用程序时添加以下行。 m_amAudioManager.setSpeakerphoneOn(true); 但是,这条线的问题是,当我接到一个电话(普通电话),默认情况下扬声器打开。 我真的需要帮助。

Android AudioTrack不播放所有示例

我使用AudioTrack来播放正弦波序列,但是当我在HTC M9上运行它时,它只播放一部分样本,播放时间是随机的。 例如,我有20个音调可以播放,但只能播放2到17.5个音调。 是的,它甚至会停止在一个基调。 这是我的代码,从另一个答案: ArrayList<double[]> samples = new ArrayList<>(); int numSamples = 0; for (final ToneSegment seg : sequence) { int num = seg.getDuration() * sampleRate / 1000; double[] sample = new double[num]; for (int i = 0; i < num; ++i) { sample[i] = Math.sin(2 * Math.PI * i * seg.getPitch() / sampleRate); […]

在Android上使用OpenSL ES通过套接字通信stream式传输MP3audio

我试图通过接入点将Android手机中的MP3stream式传输到另一款使用WiFi的Android手机。 问题是,OpenSL ES似乎只支持PCMaudio缓冲区作为源(除非使用URI)。 在发送之前,我并不是在“主”端解码一个潜在的巨大文件,而是希望让“客户端”将MP3解码成PCM。 请记住,这必须发生在文件stream,而不是简单地发送整个文件,然后解码。 有什么办法可以使用OpenSL ES来完成这个任务吗? AudioTrack? 这似乎是一个相当普遍的要求。