首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏落影的专栏

    iOS在线音频流播放

    connection_socket, buf, bytesRead, 0); // 关闭socket close(connection_socket); 2、AudioQueue播放音频 AudioQueue的播放时,需要先给audioBuffer 填充数据,并把audioBuffer放入AudioQueue,然后通知AudioQueue开始播放; AudioQueue从已经填充的audioBuffer里面开始播放数据,实时把播放完毕的audioBuffer 回调给业务层,业务继续填充播放完毕的audioBuffer,重复流程直到音频播放完毕。 是播完结束的回调 AudioQueueNewOutput(&asbd, MyAudioQueueOutputCallback, myData, NULL, NULL, 0, &audioQueue); // AudioBuffer

    3.6K30发布于 2018-04-27
  • 来自专栏Creator星球游戏开发社区

    使用 Cocos Creator 开发动感音乐游戏!

    的获取 流程我们了解到了,如何取到 AudioBuffer 呢? 一般的做法是通过 FileReader 来读取到 File 类型,转为 ArrayBuffer 类型,最后再转 AudioBuffer 类型。有没有更方便的做法呢?当然有了!白嫖啊! 我们打印引擎封装好的 cc.AudioClip 资源,可以清晰的看到 _audio 就是我们想要的 AudioBuffer 类型,完美! ? 数据处理 好了,万事俱备,就差如何分析音频数据了。 // 也就是将 AudioBuffer 数据传递进去。 // 以下就是创建音频资源节点管理者。 this.audioBufferSourceNode = audioContext.createBufferSource(); // 将 AudioBuffer 传递进去。

    2.8K10发布于 2019-12-16
  • 来自专栏大龄程序员的人工智能之路

    在创业公司,我靠它续命 ...

    include <QFile> class MyAudioInput { private: QAudioOutput* audio; // QAudioOutput对象 QBuffer audioBuffer sourceFile.setFileName("/tmp/test.raw"); sourceFile.open(QIODevice::ReadOnly); audioBuffer.setData (sourceFile.readAll()); // 读取文件内容到缓冲区 audioBuffer.open(QIODevice::ReadOnly); // 打开缓冲区 audio->start(&audioBuffer); // 开始播放 } void stop() { audio->stop(); audioBuffer.close

    46730编辑于 2023-09-25
  • 来自专栏Android点滴分享

    AudioRecord源码解读(4)

    ; mCbf(EVENT_MORE_DATA, mUserData, &audioBuffer); // 利用有数据了 size_t readSize = audioBuffer.size status_t err = obtainBuffer(&audioBuffer, blocking ? = TRANSFER_OBTAIN) { audioBuffer->frameCount = 0; audioBuffer->size = 0; audioBuffer ->frameCount = buffer.mFrameCount; audioBuffer->size = buffer.mFrameCount * mFrameSize; audioBuffer ->raw = buffer.mRaw; audioBuffer->sequence = oldSequence; if (nonContig !

    2.2K10编辑于 2022-10-25
  • 来自专栏Android Camera开发

    一种“在 Android 设备上,播放视频的同时,获取实时音频流”的有效方案

    , size=%zu (%zd)", buffer, userSize, userSize); return BAD_VALUE; } size_t written = 0; Buffer audioBuffer ; while (userSize >= mFrameSize) { audioBuffer.frameCount = userSize / mFrameSize; status_t err = obtainBuffer(&audioBuffer, blocking ? ; memcpy(audioBuffer.i8, buffer, toWrite); mBuffer = malloc(toWrite); memcpy(mBuffer size_t toWrite = audioBuffer.size; memcpy(audioBuffer.i8, buffer, toWrite); mBuffer

    3.2K40发布于 2021-05-18
  • 来自专栏落影的专栏

    Audio Unit播放PCM文件

    是回调的结构体; AudioBufferList是音频的缓存数据结构,具体如下: struct AudioBufferList { UInt32 mNumberBuffers; AudioBuffer mBuffers[1]; // this is a variable length array of mNumberBuffers elements }; struct AudioBuffer { mNumberChannels; UInt32 mDataByteSize; void* __nullable mData; }; mNumberBuffers: AudioBuffer 的数量 mBuffers:AudioBuffer的指针数组,数组长度等于mNumberBuffers AudioBuffer:mNumberChannels是声道数,mDataByteSize是buffer

    3.5K60发布于 2018-04-27
  • 来自专栏流媒体技术

    H5实时解码音频并播放

    window.AudioContext = window.AudioContext || window.webkitAudioContext; var context = new window.AudioContext(); 创建audioBuffer var audioBuffers = [] var audioBuffer = context.createBuffer(channels, frameCount, samplerate); 播放音频 for (var channel = 0; channel < channels; channel++) { var nowBuffering = audioBuffer.getChannelData } } : function(fromBuffer) { var nowBuffering = audioBuffer.getChannelData var source = context.createBufferSource(); source.buffer = audioBuffer

    1.5K20编辑于 2022-07-28
  • 来自专栏TSINGSEE青犀视频

    国标GB28181协议视频推流平台EasyGBD手机推流如何实现音频采集功能?

    mAudioRecord.startRecording(); 4、读取采集到的声音数据 /* * 不断的读取采集到的声音数据,放进编码器的输入缓存inputBuffers中进行编码 * audioBuffer 存储写入音频录制数据的缓冲区 * sizeInBytes 请求的最大字节数 * public int read (ByteBuffer audioBuffer, int sizeInBytes

    1.9K20发布于 2021-02-01
  • 来自专栏囍楽云博客

    Js自动播放HTML音乐(不受浏览器限制,无需先与浏览器交互,无需对浏览器进行修改)

    window.mozAudioContext || window.msAudioContext; try { var context = new contextClass(); var source = null; var audioBuffer 立即停止 } } function playSound() { source = context.createBufferSource(); source.buffer = audioBuffer initSound(arrayBuffer) { context.decodeAudioData(arrayBuffer, function(buffer) { //解码成功时的回调函数 audioBuffer

    8.5K80编辑于 2022-12-29
  • 来自专栏零域Blog

    又做了一个WEB端的音频可视化

    需要一个AudioBufferSourceNode对象,它代表一个音频源,通过AudioContext的createBufferSourceAPI来创建,它还需要一个AudioBuffer类型的音频资源 把音频放入AudioBuffer后,可以传入到一个 AudioBufferSourceNode进行播放。 来源 MDN 简单来说就是把我们网上的或者本地的又或者通过设备麦克风等获取的一段音频转换成AudioBuffer然后“喂”给AudioBufferSourceNode对象,这样我们这个音频源就可以播放啦

    1.2K30编辑于 2022-03-28
  • 来自专栏关键帧Keyframe

    iOS AVDemo(11):视频转封装,从 MP4 到 MP4丨音视频工程示例

    ]; CFRelease(videoBuffer); } CMSampleBufferRef audioBuffer = [self.demuxer copyNextAudioSampleBuffer]; if (audioBuffer) { [self.muxer appendSampleBuffer:audioBuffer]; CFRelease(audioBuffer); } }

    1.1K20编辑于 2022-06-13
  • 来自专栏Android点滴分享

    AudioTrack源码解读(2)

    status_t err = obtainBuffer(&audioBuffer, blocking ? ; memcpy(audioBuffer.i8, buffer, toWrite); buffer = ((const char *) buffer) + toWrite ; userSize -= toWrite; written += toWrite; releaseBuffer(&audioBuffer); ->frameCount = buffer.mFrameCount; audioBuffer->size = buffer.mFrameCount * mFrameSize; audioBuffer ->raw = buffer.mRaw; audioBuffer->sequence = oldSequence; if (nonContig !

    1.6K20编辑于 2022-10-25
  • 来自专栏前端小吉米

    让你听见的 HTML5

    audioContext 连接的是 AudioBuffer 和音频播放器。中间可以和一些 Node 连接,这些 Node 是用来对流进行处理的。 analyserNode: 频谱分析 offlineContext : 快速音视频处理 下面是直接解码一个 Buffer 为音频处理格式流: context.decodeAudioData(buffer,audioBuffer =>{ // audioBuffer 对象 }); 这意味着,我们可以直接拿到音频流里面的具体数据,而剩下的就是我们的想象空间了。

    1.3K20发布于 2018-08-03
  • 来自专栏前端达人

    浏览器里藏着一个专业音频工作站?揭秘Web Audio API的硬核玩法

    解码为AudioBuffer(解压缩) const audioBuffer = awaitthis.audioCtx.decodeAudioData(arrayBuffer); 创建音源节点 this.source = this.audioCtx.createBufferSource(); this.source.buffer = audioBuffer; bgm.mp3'); // 游戏逻辑里调用 player.enterUnderwater(); // 角色跳入水中 流程图 [网络] ─fetch→ [ArrayBuffer] ─decode→ [AudioBuffer this.listener.upX.value = 0; this.listener.upY.value = 1; this.listener.upZ.value = 0; } createSpatialSound(audioBuffer , x, y, z) { const source = this.audioCtx.createBufferSource(); source.buffer = audioBuffer;

    26710编辑于 2026-03-12
  • 来自专栏Article

    前端音频合成

    new AudioContext(); var source = context.createBufferSource() context.decodeAudioData(arrayBuffer, (audioBuffer ) => { source.buffer = audioBuffer var gain = context.createGain() gain.gain.value = 0.6 source.connect (gain) source.start(0) gain.connect(context.destination) }) 首先需要一个音频源,在这里我们使用 audioBuffer通过 Ajax或者 Fetch拿到 ArrayBuffer,然后 decodeAudioData 获得 audioBuffer,这就是 input,然后添加声音音量(Effect),最后连接到 destination,默认就是扬声器

    2.2K20编辑于 2022-06-15
  • OpenAI终于上线实时视频通话功能,看我用前端技术实现0元购版的“和AI视频通话”功能

    我找到了免费的ASR接口,通过getUserMedia获取麦克风输入,通过MediaRecorder获得audioBuffer,通过AudioContext和audiobuffer-to-wav进行转码

    27510编辑于 2025-12-29
  • 来自专栏糊一笑

    模拟制作网易云音乐(AudioContext)

    样式采用的是预处理sass,感兴趣的可以去看一下代码 2.3 创建音频 /** * 创建音频 * @param AudioBuffer buffer AudioBuffer对象 * @return ac.state === 'closed') { ac = new (window.AudioContext || window.webkitAudioContext)(); } audioBuffer gainNode.disconnect(ac.destination); bufferSource = ac.createBufferSource(); bufferSource.buffer = audioBuffer

    2.4K50发布于 2018-05-09
  • 来自专栏前端达人

    分享11个高级前端开发工程师都应该掌握的Web API

    response.arrayBuffer()) .then((arrayBuffer) => audioContext.decodeAudioData(arrayBuffer)) .then((audioBuffer ) => { const source = audioContext.createBufferSource(); source.buffer = audioBuffer; source.connect

    40810编辑于 2024-01-19
  • 来自专栏smy

    FLV提取AAC音频单独播放并实现可视化的频谱

    方式二:createBufferSource AudioContext.createBufferSource() 创建一个 AudioBufferSourceNode 对象, 他可以通过 AudioBuffer AudioBuffer可以用AudioContext 接口的 decodeAudioData() 方法异步解码音频文件中的 ArrayBuffer。 addFlvHeader (chunk) { let audioBuffer = null if (this.flvHeader == null) { // copy first 9 bytes (flv header) this.flvHeader = chunk.slice(0, 9) audioBuffer = chunk } else { audioBuffer = this.appendBuffer(this.flvHeader, chunk) } return audioBuffer }  五.

    3K61发布于 2019-05-15
  • 来自专栏Golang开发

    iOS音频(1)——AudioToolbox

    PacketTable AudioFilePacketTableInfo 读写 struct AudioBufferList { UInt32 mNumberBuffers; AudioBuffer operator=(const AudioBufferList&); #endif }; typedef struct AudioBufferList AudioBufferList; struct AudioBuffer mNumberChannels; UInt32 mDataByteSize; void* __nullable mData; }; typedef struct AudioBuffer AudioBuffer; 写入文件内容 写入和读取类似,只是要预先填好BufferList的内容: OSStatus ExtAudioFileWrite ( ExtAudioFileRef inExtAudioFile

    2.5K20发布于 2019-05-29
领券