对于iphone语音更改应用程序(目标c),我试图从录制音频队列缓冲区中取样采样的整数值,在函数中处理它们并将修改后的值写回回放缓冲区.目前我使用这样的东西
AudioBuffer audioBuffer = bufferList->mBuffers[0];
int bufferSize = audioBuffer.mDataByteSize / sizeof(SInt32);
SInt32 *frame = audioBuffer.mData;
SInt32 signalInput[22050];
for( int i=0; i<bufferSize; i++ ) {
SInt32 currentSample = frame[i];
*(signalInput +i) = currentSample;
}
Run Code Online (Sandbox Code Playgroud)
提取采样值并且似乎工作得非常好(signalinput应该是用于写入整数样本的目标向量).但是把它们写回缓冲区仍然是一个问题......我搜索了文档和很多论坛以找到解决方案,但还没有成功.
所以我非常感谢任何建议,感谢提前,卢卡斯
我在查找没有转换中断的攻击(声音开始)/延音(循环声音)/衰减(声音结束)序列时遇到问题.是否有任何好的库来处理这个,或者我应该用AVAudioPlayer自己动手?AudioQueue是一个更好看的地方吗?我曾经使用过SoundEngine.cpp,但这已经有一段时间了.CAF仍然是最好的格式吗?
谢谢!
我需要同时播放和录制.问题是播放和录制的声音应该不同.播放的sound_1通过耳机插孔连续发送到连接的设备,设备分析此声音_1并通过耳机插孔发回另一个声音_2.我收到了这个声音_2,但是当我尝试录制它时,我混合了sound_1和sound_2.有没有办法单独播放/录制,或者我需要某种过滤器来传入声音2?我尝试用AVAudioPlayer播放声音并用AudioQueue录音,会话是PlayAndRecord.
发现了一些类似的主题:在iOS中播放和录制音频同时使用耳机插孔引脚?
但也没有建设性的答案.
我从RTMPPacket获取音频数据,并使用AudioQueue在IPAD中播放它。
首先,声音好听。但大约15分钟后,就没有声音了。
然后数据就ok了,队列正在播放。
我不知道为什么。谁能帮我?谢谢。
这是我用来播放音频的类。
音频播放器.h
#import <Foundation/Foundation.h>
#import <CoreAudio/CoreAudioTypes.h>
#import <CoreFoundation/CoreFoundation.h>
#import <AudioToolbox/AudioToolbox.h>
#include <unistd.h>
#define kNumberBuffers 3
@interface AudioPlayer : NSObject
{
AudioQueueRef mQueue;
AudioQueueBufferRef mBuffers[kNumberBuffers];
AudioStreamBasicDescription mPlayFormat;
int mIndex;
@public
Boolean mIsRunning;
Boolean mIsInitialized;
int mBufferByteSize;
int pip_fd[2];
UInt32 mNumPacketsToRead;
}
@property AudioQueueRef mQueue;
-(id)init;
-(id)initWithSampleRate:(int)sampleRate;
-(void)startPlayWithBufferByteSize:(int)bufferByteSize;
-(void)stopPlay;
-(void)putAudioData:(short*)pcmData;
@end
Run Code Online (Sandbox Code Playgroud)
音频播放器.m
#import "AudioPlayer.h"
@implementation AudioPlayer
@synthesize mQueue;
void AQBufferCallback(void * inUserData ,
AudioQueueRef inAQ,
AudioQueueBufferRef inBuffer)
{
AudioPlayer *THIS = (__bridge AudioPlayer *)(inUserData);
if(THIS->mIsRunning)
{
inBuffer->mPacketDescriptionCount = …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 AudioQueue 从服务器播放 PCM 流数据。
PCM数据格式:
Sample rate = 48000, num of channel = 2, Bit per sample = 16
Run Code Online (Sandbox Code Playgroud)
并且,服务器不会将固定字节流式传输到客户端。(可变字节。)(例如:30848、128、2764、...字节)
如何设置ASBD?不知道怎么设置mFramesPerPacket
,,mBytesPerFrame
。mBytesPerPacket
我看过Apple的参考文档,但是没有详细的说明。
请给我任何想法。
新添加: 这里,ASBD结构是我设置的。(语言:斯威夫特)
// Create ASBD structure & set properties.
var streamFormat = AudioStreamBasicDescription()
streamFormat.mSampleRate = 48000
streamFormat.mFormatID = kAudioFormatLinearPCM
streamFormat.mFormatFlags = kLinearPCMFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked
streamFormat.mFramesPerPacket = 1
streamFormat.mChannelsPerFrame = 2
streamFormat.mBitsPerChannel = 16
streamFormat.mBytesPerFrame = (streamFormat.mBitsPerChannel / 8) * streamFormat.mChannelsPerFrame
streamFormat.mBytesPerPacket = streamFormat.mBytesPerFrame
streamFormat.mReserved = 0
// Create AudioQueue for playing …
Run Code Online (Sandbox Code Playgroud) 我有个问题.我想在我的应用程序中使用一些与声音一起使用的功能.
我找到了示例SpeakHere,并在我的应用程序中包含此应用程序的主要部分功能.但我有3个错误:
没有用于调用'AudioSessionInitialize'的匹配函数
我该如何修复这个错误?
我添加到项目框架:coreAudio,AudioToolbox
我使用ARC.
我分析了iPhone dev论坛的"SpeakHere"示例代码.
有一个启动AudioQueue的代码,如下所示..
AudioTimeStamp ats = {0};
AudioQueueStart(mQueue, &ats);
Run Code Online (Sandbox Code Playgroud)
但我不知道如何开始文件中间.
我更改了AudioTimeStamp,其中包含各种值为负数.但它不起作用.
请让我知道你的好评.谢谢.
根据我的理解,音频队列服务是比使用音频单元的音频单元更高级别的API.OpenAL还使用音频单元.因此,Audio Units是iOS中最低级别的音频API.
我需要录制声音,然后将自定义滤镜应用于音频流并播放.音频队列服务似乎适合录制,它们也可以用来播放.但是我仍然不确定他们是否允许将自己的算法应用于音频流,就像AURemoteIO音频单元那样.
如何在AudioQueue中设置音量而不使用AudioQueueRef?
我在StackOverflow上对此有很多疑问,但所有这些都使用了AudioQueueRef对象.
是否可以在不使用AudioQueueRef的情况下这样做?
请建议
谢谢.
我正在尝试开发app从服务器播放流式PCM数据.
我使用过AudioQueue,但效果不好.
PCM数据格式(来自服务器):
Sample rate = 48000, num of channel = 2, Bit per sample = 16
Run Code Online (Sandbox Code Playgroud)
并且,服务器不会将固定字节流式传输到客户端.
(流变量字节.例如:30848,128,2764,......字节)
我的源代码:
在这里,ASBD结构我已经设置并创建了音频队列对象(语言:Swift)
// Create ASBD structure & set properties.
var streamFormat = AudioStreamBasicDescription()
streamFormat.mSampleRate = 48000
streamFormat.mFormatID = kAudioFormatLinearPCM
streamFormat.mFormatFlags = kLinearPCMFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked
streamFormat.mFramesPerPacket = 1
streamFormat.mChannelsPerFrame = 2
streamFormat.mBitsPerChannel = 16
streamFormat.mBytesPerFrame = (streamFormat.mBitsPerChannel / 8) * streamFormat.mChannelsPerFrame
streamFormat.mBytesPerPacket = streamFormat.mBytesPerFrame
streamFormat.mReserved = 0
// Create AudioQueue for playing PCM streaming data.
var err = AudioQueueNewOutput(&streamFormat, self.queueCallbackProc, nil, nil, …
Run Code Online (Sandbox Code Playgroud) audioqueue ×10
ios ×7
iphone ×5
audio ×3
core-audio ×3
objective-c ×3
pcm ×2
audiounit ×1
buffer ×1
sample ×1
swift ×1