声音和编程音频硬件,以及各种音频格式或容器。有关声音播放的特定问题,请使用[音频播放器]或[播放],对于录音特定的问题,请使用[录音]或[录音]。
我在 Python 中的套接字连接上使用 select 来发送两个 wav 文件,块大小为 1024。服务器正在侦听两个套接字,它们都发送 1024 的块(使用 print
我正在使用python来获取Windows中当前选择的音频设备。我现在使用 pyaudio 并开放使用其他库。 我所取得的成就: 使用 pyaudio 的 get_device_info_by_index 我可以列出所有
亲爱的! 我正在使用 QtCreator 创建一个项目,该项目是一个正弦波发生器,类似于 60 到 83.3Hz 的正弦波发生器。 我使用示波器观察这个信号,我使用输出
我想重播使用 Web Audio API 在 javascript 中录制的音频 blob (wav)。 我尝试了以下方法: 函数 replayBlob( blob ) { var blobURL = window.URL.createObjectURL(blob); ...
我正在开发一个嵌入式Linux系统(5.10.24),我想在其中使用FFMPEG API播放m3u8音频流。 这是我的代码。 #包括 #包括 #包括 我正在开发一个嵌入式Linux系统(5.10.24),我想在其中使用FFMPEG API播放m3u8音频流。 这是我的代码。 #include <stdio.h> #include <stdbool.h> #include <alsa/asoundlib.h> #include <libswresample/swresample.h> #include <libavcodec/avcodec.h> #include <libavformat/avformat.h> #include <libswscale/swscale.h> int init_pcm_play(snd_pcm_t **playback_handle,snd_pcm_uframes_t chunk_size,unsigned int rate,int bits_per_sample,int channels) { snd_pcm_hw_params_t *hw_params; snd_pcm_format_t format; //1. openPCM, if (0 > snd_pcm_open(playback_handle, "default", SND_PCM_STREAM_PLAYBACK, 0)) { printf("snd_pcm_open err\n"); return -1; } //2. snd_pcm_hw_params_t if(0 > snd_pcm_hw_params_malloc (&hw_params)) { printf("snd_pcm_hw_params_malloc err\n"); return -1; } //3. hw_params if(0 > snd_pcm_hw_params_any (*playback_handle, hw_params)) { printf("snd_pcm_hw_params_any err\n"); return -1; } //4. if (0 > snd_pcm_hw_params_set_access (*playback_handle, hw_params, SND_PCM_ACCESS_RW_INTERLEAVED)) { printf("snd_pcm_hw_params_any err\n"); return -1; } //5. SND_PCM_FORMAT_U8,8 if(8 == bits_per_sample) { format = SND_PCM_FORMAT_U8; } if(16 == bits_per_sample) { format = SND_PCM_FORMAT_S16_LE; } if (0 > snd_pcm_hw_params_set_format (*playback_handle, hw_params, format)) { printf("snd_pcm_hw_params_set_format err\n"); return -1; } //6. if (0 > snd_pcm_hw_params_set_rate_near (*playback_handle, hw_params, &rate, 0)) { printf("snd_pcm_hw_params_set_rate_near err\n"); return -1; } //7. if (0 > snd_pcm_hw_params_set_channels(*playback_handle, hw_params, 2)) { printf("snd_pcm_hw_params_set_channels err\n"); return -1; } //8. set hw_params if (0 > snd_pcm_hw_params (*playback_handle, hw_params)) { printf("snd_pcm_hw_params err\n"); return -1; } snd_pcm_hw_params_get_period_size(hw_params, &chunk_size, 0); snd_pcm_hw_params_free (hw_params); return 0; } int main(int argc, char *argv[]) { AVFormatContext *pFormatCtx = NULL; //for opening multi-media file int audioStream = -1; AVCodecContext *pCodecCtx = NULL; AVCodec *pCodec = NULL; // the codecer AVFrame *pFrame = NULL; AVPacket *packet; uint8_t *out_buffer; struct SwrContext *au_convert_ctx; snd_pcm_t *playback_handle; int bits_per_sample = 0; if (avformat_open_input(&pFormatCtx, argv[1], NULL, NULL) != 0) { printf("Failed to open video file!"); return -1; // Couldn't open file } if(avformat_find_stream_info(pFormatCtx,NULL)<0) { printf("Failed to find stream info.\n"); return -1; } audioStream = av_find_best_stream(pFormatCtx, AVMEDIA_TYPE_AUDIO, -1, -1, NULL, 0); if (audioStream == -1) { printf("Din't find a video stream!"); return -1;// Didn't find a video stream } av_dump_format(pFormatCtx, audioStream, NULL, false); // Find the decoder for the video stream pCodec = avcodec_find_decoder(pFormatCtx->streams[audioStream]->codecpar->codec_id); if (pCodec == NULL) { printf("Unsupported codec!\n"); return -1; // Codec not found } // Copy context pCodecCtx = avcodec_alloc_context3(pCodec); AVCodecParameters *pCodecParam = pFormatCtx->streams[audioStream]->codecpar; if (avcodec_parameters_to_context(pCodecCtx, pCodecParam) < 0) { printf("Failed to set codec params\n"); return -1; } // Open codec if (avcodec_open2(pCodecCtx, pCodec, NULL) < 0) { printf("Failed to open decoder!\n"); return -1; // Could not open codec } packet = av_packet_alloc(); pFrame = av_frame_alloc(); uint64_t iInputLayout = av_get_default_channel_layout(pCodecCtx->channels); enum AVSampleFormat eInputSampleFormat = pCodecCtx->sample_fmt; int iInputSampleRate = pCodecCtx->sample_rate; uint64_t iOutputLayout = av_get_default_channel_layout(pCodecCtx->channels); int iOutputChans = pCodecCtx->channels; enum AVSampleFormat eOutputSampleFormat = AV_SAMPLE_FMT_S16; int iOutputSampleRate = pCodecCtx->sample_rate; au_convert_ctx = swr_alloc_set_opts(NULL,iOutputLayout, eOutputSampleFormat, iOutputSampleRate, iInputLayout,eInputSampleFormat, iInputSampleRate, 0, NULL); swr_init(au_convert_ctx); int iConvertLineSize = 0; int iConvertBuffSize = av_samples_get_buffer_size(&iConvertLineSize, iOutputChans, pCodecCtx->frame_size, eOutputSampleFormat, 0); printf("ochans: %d, ifrmsmp: %d, osfmt: %d, cbufsz: %d\n", iOutputChans, pCodecCtx->frame_size, eOutputSampleFormat, iConvertBuffSize); out_buffer = (uint8_t *) av_malloc(iConvertBuffSize); if(eOutputSampleFormat == AV_SAMPLE_FMT_S16 ) { bits_per_sample = 16; } /*** alsa handle ***/ init_pcm_play(&playback_handle,256, iOutputSampleRate,bits_per_sample,2); if (0 > snd_pcm_prepare (playback_handle)) { printf("snd_pcm_prepare err\n"); return -1; } while (av_read_frame(pFormatCtx, packet) >= 0) { if (packet->stream_index == audioStream) { avcodec_send_packet(pCodecCtx, packet); while (avcodec_receive_frame(pCodecCtx, pFrame) == 0) { int outframes = swr_convert(au_convert_ctx, &out_buffer, pCodecCtx->frame_size, (const uint8_t **) pFrame->data, pFrame->nb_samples); // 转换音频 snd_pcm_writei(playback_handle, out_buffer, outframes); av_frame_unref(pFrame); } } av_packet_unref(packet); } swr_free(&au_convert_ctx); snd_pcm_close(playback_handle); av_freep(&out_buffer); return 0; } 当我运行它时,我得到以下输出。 ./ffmpeg_test http://live.ximalaya.com/radio-first-page-app/live/2730/64.m3 u8 [hls @ 0x21a8020] Skip ('#EXT-X-VERSION:3') [hls @ 0x21a8020] Opening 'http://broadcast.tx.xmcdn.com/live/2730_64_241104_000015_2186.aac' for reading [hls @ 0x21a8020] Opening 'http://broadcast.tx.xmcdn.com/live/2730_64_241104_000015_2187.aac' for reading Input #0, hls, from '(null)': Duration: N/A, bitrate: N/A Program 0 Metadata: variant_bitrate : 0 Stream #0:0: Audio: aac (HE-AAC), 44100 Hz, stereo, fltp Metadata: variant_bitrate : 0 [http @ 0x21b7ba0] Opening 'http://broadcast.tx.xmcdn.com/live/2730_64_241104_000015_2188.aac' for reading [hls @ 0x21a8020] Skip ('#EXT-X-VERSION:3') [http @ 0x21d4c20] Opening 'http://broadcast.tx.xmcdn.com/live/2730_64_241104_000015_2189.aac' for reading 一开始可以播放音频,直到第二次Opening http://...发生。 如何使其能够连续播放m3u8音频流? 我找到了代码的修复程序,使其能够连续播放直播流。 需要添加以下代码 rc = snd_pcm_writei(playback_handle, out_buffer2, outframes); + if (rc < 0) { + snd_pcm_prepare(playback_handle); + } 也就是说,流媒体播放过程中出现错误,需要恢复ALSA错误。 现在可以连续播放直播了,但是我遇到了另一个问题:链接更改时会出现轻微的中断,如下, [http @ 0x6eaba0] Opening 'http://broadcast.tx.xmcdn.com/live/2730_64_241107_000014_1e5b.aac' for reading ALSA lib pcm.c:8675:(snd_pcm_recover) underrun occurred [http @ 0x7665d0] Opening 'http://live.ximalaya.com/radio-first-page-app/live/2730/64.m3u8' for reading [hls @ 0x6db020] Skip ('#EXT-X-VERSION:3') [http @ 0x707c40] Opening 'http://broadcast.tx.xmcdn.com/live/2730_64_241107_000014_1e5c.aac' for reading ALSA lib pcm.c:8675:(snd_pcm_recover) underrun occurred [http @ 0x7665d0] Opening 'http://live.ximalaya.com/radio-first-page-app/live/2730/64.m3u8' for reading [hls @ 0x6db020] Skip ('#EXT-X-VERSION:3') [http @ 0x6eaba0] Opening 'http://broadcast.tx.xmcdn.com/live/2730_64_241107_000014_1e5d.aac' for reading ALSA lib pcm.c:8675:(snd_pcm_recover) underrun occurred 我的缓冲区/周期设置似乎有问题,设置正确的值是多少???
嗨,我找到了通过 MediaRecorder 将音频数据发送到服务器的方法,但它只能作为录音机使用,但我需要一个流。我的意思是它仅在 MediaRecorder 停止后才起作用。但我需要发送...
使用 Socket IO Flask 应用程序进行音频流传输时出现问题
下面是我的 user1_interface.html/user2_interface.html 代码,我可以在其中听到音频,但问题是音频按钮依赖于视频。如果视频打开,那么只有我可以关闭...
因此,每次满足 if 语句时,代码都会发送音频警报。然而,代码会暂停大约 3 秒(音频文件长度),并且会暂停 While 循环,使得 OpenCV vi...
我正在为那些听不清的人制作一个颤振助听器应用程序,想法是麦克风让用户可以改变其频率,使用滑块或其他东西调整其他设置......
我正在创建一个音频可视化器,它使用 Unity5 游戏引擎对振幅做出反应。我使用对数、RMS 值和 .GetOutputData 计算幅度。 最初我的函数称为
我正在编写一个pipewire节点(pipewire版本1.0.0)来同时播放声音并从麦克风录制,音频规格为8kHz采样率,1通道和SPA_AUDIO_FORMAT_S16格式。的...
我正在尝试使用网络音频 API 制作一些音频信号。我想在 web/js 中为我的音频信号添加一些偏差。如何像此图一样向上/向下偏置音频信号? 我做了一些振荡器,我
我已经尝试了网站上几乎所有可用的答案,但不知何故我无法让通知声音起作用。我正在测试的当前代码是这样的(通知内置在警报接收中......
我试图在十六进制编辑器中查找 wav 文件音高,但找不到它们! 我尝试更改一些字节,但它们只是损坏了文件,然后我尝试更改更多字节,但随后它就崩溃了...
我正在尝试用 Java 播放 *.wav 文件。我希望它执行以下操作: 按下按钮时,会发出短促的蜂鸣声。 我用谷歌搜索了一下,但大部分代码都不起作用。有人可以...
我正在寻找一种音频格式,开始时几个小时的静默不会影响整体文件大小。有谁知道该使用哪一个以及我必须使用哪些设置?我...
我正在做一个关于文本识别的项目。这里的要点之一是识别后的文本到语音翻译。你能帮我找到一个非常简单、简单的 C++ Builder 语音引擎吗...
我正在R中工作,需要用静音填充短音频块以使其长度固定。我正在使用tuneR::readWave() 读取音频块,这表明文件是16 位的。然后我打算...
无法读取 null / (react-native-sound) 的属性“IsAndroid”
我正在开发版本为 0.74.5 的 React Native。我还使用版本 0.11.2 的 React-native-sound 库 我几乎有一个空白项目。我愿意在以下情况下播放 mp3 文件
如何在Python3中正确使用whisper_timestamped
如何使用whisper-timestamped的转录方法?我有音频文件“example.mp3”,我想生成它的时间戳转录,因为我已经完成了我的研究打开艾的耳语-