Android实时将PCM转码MP3并播放音频

AudioCapturePlay

基于AudioRecord录制原始pcm音频,使用开源库lame实时转换pcm音频为MP3格式音频,采用Service、MediaPlayer播放MP3,提供录制音频计时器显示,音频音量分贝值显示,音频频谱显示,录制、播放状态控制等

项目地址

  1. 单独音频录制播放(github.com/MannaYang/A…)
  2. 音视频录制合成(github.com/MannaYang/A…)

功能简介

目前包含基本的音频录制、播放操作,功能如下:

  1. 基于AudioRecord录制原始PCM格式音频数据
  2. 基于lame库实时转换PCM音频为MP3格式音频
  3. 基于原始lame项目中C文件编译生成对应so文件、提供调用lame编码封装类
  4. 基于FFT格式化PCM数据并实时显示音频频谱
  5. 提供录制音频计时器显示、音量分贝值显示、录制开始、暂停、继续等状态控制与文件写入
  6. 提供AudioPlayManager对象控制MediaPlayer播放、暂停、继续状态、Timer定时更新SeekBar进度条
  7. 提供ObjectAnimator方式实现唱针、唱片旋转、复原动画操作

其它音

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果您需要将实时音频流以 PCM 格式的形式从麦克风或其他音频输入设备中捕获并换为 MP3 格式的音频流,您可以使用 PortAudio 库进行实时音频输入和输出,并使用 LAME 库将 PCM 数据编码为 MP3 数据。下面是一个使用 PortAudio 和 LAME 库进行实时音频换的简单示例程序: ```c #include <stdio.h> #include <stdlib.h> #include <portaudio.h> #include <lame/lame.h> #define SAMPLE_RATE (44100) #define FRAMES_PER_BUFFER (512) #define NUM_CHANNELS (2) #define MP3_BITRATE (128) typedef struct { lame_global_flags *lame; FILE *mp3_file; } lame_data; static int pa_callback(const void *input_buffer, void *output_buffer, unsigned long frames_per_buffer, const PaStreamCallbackTimeInfo *time_info, PaStreamCallbackFlags status_flags, void *user_data) { lame_data *data = (lame_data *)user_data; short int *input = (short int *)input_buffer; unsigned char mp3_buffer[FRAMES_PER_BUFFER]; int write; write = lame_encode_buffer_interleaved(data->lame, input, frames_per_buffer, mp3_buffer, FRAMES_PER_BUFFER); fwrite(mp3_buffer, write, 1, data->mp3_file); return paContinue; } int main(void) { PaStream *stream; PaStreamParameters input_params; PaError err; lame_data data; lame_t lame; lame = lame_init(); lame_set_in_samplerate(lame, SAMPLE_RATE); lame_set_VBR(lame, vbr_default); lame_set_brate(lame, MP3_BITRATE); lame_init_params(lame); data.lame = lame; data.mp3_file = fopen("output.mp3", "wb"); err = Pa_Initialize(); if (err != paNoError) { printf("Failed to initialize PortAudio: %s\n", Pa_GetErrorText(err)); return -1; } input_params.device = Pa_GetDefaultInputDevice(); if (input_params.device == paNoDevice) { printf("No default input device.\n"); return -1; } input_params.channelCount = NUM_CHANNELS; input_params.sampleFormat = paInt16; input_params.suggestedLatency = Pa_GetDeviceInfo(input_params.device)->defaultLowInputLatency; input_params.hostApiSpecificStreamInfo = NULL; err = Pa_OpenStream(&stream, &input_params, NULL, SAMPLE_RATE, FRAMES_PER_BUFFER, paNoFlag, pa_callback, &data); if (err != paNoError) { printf("Failed to open PortAudio stream: %s\n", Pa_GetErrorText(err)); return -1; } err = Pa_StartStream(stream); if (err != paNoError) { printf("Failed to start PortAudio stream: %s\n", Pa_GetErrorText(err)); return -1; } printf("Recording...\n"); Pa_Sleep(10000); // 录制 10 秒钟 printf("Done.\n"); err = Pa_StopStream(stream); if (err != paNoError) { printf("Failed to stop PortAudio stream: %s\n", Pa_GetErrorText(err)); return -1; } err = Pa_CloseStream(stream); if (err != paNoError) { printf("Failed to close PortAudio stream: %s\n", Pa_GetErrorText(err)); return -1; } fclose(data.mp3_file); lame_close(lame); Pa_Terminate(); return 0; } ``` 该程序使用 PortAudio 库从默认音频输入设备捕获实时音频流,并使用 LAME 库将 PCM 数据编码为 MP3 数据,并将其写入 output.mp3 文件中。在编译程序之前,需要先安装 PortAudio 和 LAME 库,可以使用以下命令在 Ubuntu 中进行安装: ``` sudo apt-get install portaudio19-dev libmp3lame-dev ``` 然后,使用以下命令编译程序: ``` gcc -o pcm_to_mp3_realtime pcm_to_mp3_realtime.c -lportaudio -lmp3lame ``` 编译成功后,可以运行该程序,将实时音频换为 MP3 格式的音频流,并将其写入 output.mp3 文件中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值