标签: audiotoolbox

通过上(电话)扬声器播放音频

我正试图在我的应用程序中通过iPhone上的上扬声器播放音频,这是您在通话期间按下的那个.我知道这是可能的,因为我已经从App Store玩了一个游戏(通过"点击水龙头"的"The Heist")来模拟电话,并且正是如此.

我已经在网上做了很多研究,但我很难找到一个甚至讨论过这种可能性的人.绝大多数帖子似乎都是关于免提扬声器和插入式耳机(就像这个这个这个),而不是上部"电话"扬声器和免提扬声器.(部分问题可能没有一个好名字:"手机扬声器"通常意味着设备底部的免提扬声器等,所以很难做一个非常有针对性的搜索).我已经看过Apple了Audio Session Category Route Overrides,但是那些似乎(纠正我,如果我错了)只处理底部的免提扬声器,而不是手机顶部的扬声器.

我找到了一个似乎与此有关的帖子:链接.它甚至提供了一堆代码,所以我认为我在家是免费的,但现在我似乎无法让代码工作.为简单起见,我只是将DisableSpeakerPhone方法(如果我理解正确应该将音频重新路由到上层扬声器)复制到我的方法中viewDidLoad,看看它是否可行,但第一个"断言"行失败,音频继续发挥出底线.(我也按照评论中的建议导入了AudioToolbox框架,因此这不是问题.)

这是我正在使用的主要代码块(这是我复制到我viewDidLoad的测试中),尽管在我链接到的文章中还有一些方法:

void DisableSpeakerPhone () {
    UInt32 dataSize = sizeof(CFStringRef);
    CFStringRef currentRoute = NULL;
    OSStatus result = noErr;

    AudioSessionGetProperty(kAudioSessionProperty_AudioRoute, &dataSize, &currentRoute);

    // Set the category to use the speakers and microphone.
    UInt32 sessionCategory = kAudioSessionCategory_PlayAndRecord;
    result = AudioSessionSetProperty (
                                      kAudioSessionProperty_AudioCategory,
                                      sizeof (sessionCategory),
                                      &sessionCategory
                                      );
    assert(result == kAudioSessionNoError);

    Float64 sampleRate = 44100.0;
    dataSize = sizeof(sampleRate);
    result = …
Run Code Online (Sandbox Code Playgroud)

avfoundation media-player audiotoolbox ios

9
推荐指数
2
解决办法
3万
查看次数

iOS 10中新键盘点击的系统声音ID是什么?

一般
我正在开发第三方键盘,目前正试图模仿Apple在iOS 10b4中引入的新键盘点击.

当前情况
可以使用常规点击声播放,AudioServicesPlaySystemSound(1104)但我似乎无法找到两个新的其他声音的系统声音ID.我已经找到了它们的.caf等价物的位置,但即使在使用它们调整音量后,​​它们的使用也太大了AVAudioPlayer.

问题
是否有可能获得新咔嗒声的系统声音ID?

额外
如果有人想要.caf文件路径供个人使用,这里它们是:

/System/Library/Audio/UISounds/key_press_click.caf
/System/Library/Audio/UISounds/key_press_delete.caf
/System/Library/Audio/UISounds/key_press_modifier.caf
Run Code Online (Sandbox Code Playgroud)

avaudioplayer audiotoolbox ios

9
推荐指数
2
解决办法
1265
查看次数

AudioServicesPlaySystemSound不播放声音

我正在使用AudioToolBox播放一个小的.wav文件.

AudioServicesPlaySystemSound (soundFileObject);
Run Code Online (Sandbox Code Playgroud)

但有时它不会播放.

是什么原因?

objective-c audiotoolbox

8
推荐指数
2
解决办法
9048
查看次数

音频处理:以音量级别播放

我想从应用程序包中读取声音文件,复制它,播放其最大音量级别(增益值或峰值功率,我不确定它的技术名称),然后将其作为另一个文件写入捆绑包再次.

我做了复制和写作部分.生成的文件与输入文件相同.我在AudioToolbox框架中使用AudioFile服务的AudioFileReadBytes()和AudioFileWriteBytes()函数来做到这一点.

所以,我有输入文件的字节以及它的音频数据格式(通过使用带有kAudioFilePropertyDataFormat的AudioFileGetProperty())但是我找不到这些中的变量来播放原始文件的最大音量级别.

为了澄清我的目的,我正在尝试生成另一个声音级别相对于原始级别增加或减少的声音文件,所以我不关心系统的音量级别,这是由用户或iOS设置的.

这可能与我提到的框架有关吗?如果没有,还有其他建议吗?

谢谢


编辑:通过Sam关于某些音频基础知识的答案,我决定用另一种方法扩展问题.

我可以使用AudioQueue服务将现有声音文件(在捆绑中)录制到另一个文件,并在录制阶段播放音量级别(借助框架)吗?


更新:这是我如何读取输入文件和写入输出.下面的代码降低了"一些"幅度值的声级,但噪声很大.有趣的是,如果我选择0.5作为幅度值,它会增加声级而不是降低它,但是当我使用0.1作为幅度值时,它会降低声音.两种情况都涉及令人不安的噪音.我认为这就是为什么Art正在谈论规范化,但我不知道规范化.

AudioFileID inFileID;

CFURLRef inURL = [self inSoundURL];

AudioFileOpenURL(inURL, kAudioFileReadPermission, kAudioFileWAVEType, &inFileID)

UInt32 fileSize = [self audioFileSize:inFileID];
Float32 *inData = malloc(fileSize * sizeof(Float32)); //I used Float32 type with jv42's suggestion
AudioFileReadBytes(inFileID, false, 0, &fileSize, inData);

Float32 *outData = malloc(fileSize * sizeof(Float32));

//Art's suggestion, if I've correctly understood him

float ampScale = 0.5f; //this will reduce the 'volume' by -6db
for (int i = 0; i < fileSize; i++) {
    outData[i] = (Float32)(inData[i] …
Run Code Online (Sandbox Code Playgroud)

iphone audio volume audioqueueservices audiotoolbox

8
推荐指数
1
解决办法
6228
查看次数

使用Apple音频文件流服务,iOS 7,无法解析M4A,AAC文件

我正在使用本教程Multipeer Connectivity Audio Stream To Multiple Peers和这个项目Github Repository,以便从NSInputStream流式传输音频,这是通过以下方式获得的:

-(void)session:didReceiveStream:withName:fromPeer:
Run Code Online (Sandbox Code Playgroud)

MCSession委托方法.

之后,这将打开一个新的音频文件流(TDAudioFileStreamer/Classes/AudioFileStream.m:39):

OSStatus err = AudioFileStreamOpen((__bridge void *)self, TDAudioFileStreamPropertyListener, TDAudioFileStreamPacketsListener, 0, &_audioFileStreamID); 
Run Code Online (Sandbox Code Playgroud)

然后从NSInputStream读取字节并尝试通过这种方式解析(TDAudioFileStreamer/Classes/AudioFileStream.m:98):

err = AudioFileStreamParseBytes(self.audioFileStreamID, length, data, kAudioFileStreamParseFlag_Discontinuity);
Run Code Online (Sandbox Code Playgroud)

要么:

err = AudioFileStreamParseBytes(self.audioFileStreamID, length, data, 0);
Run Code Online (Sandbox Code Playgroud)

取决于数据流.

最后,这个用解析后的数据填充AudioQueue Buffer以便播放(我猜--TDAudioFileStreamer/Classes/TDAudioQueueFiller.m).

这对于MP3格式文件非常有用,但在尝试解析字节时使用其他格式会出现"不支持的文件格式"错误.

Apple文档称音频文件流服务支持许多格式,它们列在此链接中:Apple Stream Services支持的格式,但对我来说只适用于MP3.

我也在尝试,当打开音频文件流传递关于这样的文件格式的提示并发送M4A或AAC文件时:

OSStatus err = AudioFileStreamOpen((__bridge void *)self, TDAudioFileStreamPropertyListener, TDAudioFileStreamPacketsListener, kAudioFileAAC_ADTSType, &_audioFileStreamID);
Run Code Online (Sandbox Code Playgroud)

其中kAudioFileAAC_ADTSType是将要流式传输的已发送文件的类型,通过这种方式,"不支持的文件格式错误"消失,但应用程序崩溃并获得新的错误 在此输入图像描述

这说:io:lpc和客户:aac.

  • 有人知道这是什么意思吗?
  • 队列期待AAC格式文件?
  • 为什么LPCM(线性脉冲编码调制),我发送的M4A或AAC不是LPCM?

提前致谢.

objective-c audio-streaming audiotoolbox ios multipeer-connectivity

8
推荐指数
1
解决办法
1948
查看次数

使用Swift中的AudioToolbox访问OS X主卷

有没有从我的Swift应用程序中设置系统主卷的解决方案?

我读了很多关于AudioToolbox的内容,并在Objective-C中阅读了一些源代码示例.例如,我发现这一点:在10.6之后以编程方式设置Mac OS X卷

但我无法让它在Swift中运行.

我在https://developer.apple.com/library/mac/documentation/AudioToolbox/Reference/AudioHardwareServicesReference/index.html#//apple_ref/c/func/AudioHardwareServiceGetPropertyData中遗漏了一些示例代码

macos cocoa audiotoolbox swift

8
推荐指数
1
解决办法
4252
查看次数

迅速-AVPlayer加载失败,错误错误域= NSURLErrorDomain代码= -999“已取消”

我尝试从网址字符串播放视频。但是我有一些错误作为问题标题。

我在下面尝试此代码。videoPath是网址字符串。

let videoURL = URL(string: videoPath)
        let player = AVPlayer(url: videoURL!)
        let playerViewController = AVPlayerViewController()
        playerViewController.player = player
        self.present(playerViewController, animated: true) {
            playerViewController.player!.play()
        }
Run Code Online (Sandbox Code Playgroud)

下面是错误日志:

加载失败,并显示错误错误域= NSURLErrorDomain代码= -999“已取消” UserInfo = {NSErrorFailingURLStringKey = http: //b...a.mp4,NSErrorFailingURLKey = http: //b...a.mp4,_NSURLErrorRelatedURLSessionTaskErrorKey =(“ LocalDataTask <841B2FFA-479B-4E5A-9BD3-D9207EAA0D32>。<2>“),_ NSURLErrorFailingURLSessionTaskErrorKey = LocalDataTask <841B2FFA-479B-4E5A-9BD3-D9207EAA0D32>。<2>,NSLocalizedDescription =已取消} [-999]

我设置了info.plist-

<key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key>
        <true/>
        <key>NSExceptionDomains</key>
        <dict>
            <key>www.example.com</key>
            <dict>
                <key>NSExceptionAllowsInsecureHTTPLoads</key>
                <true/>
                <key>NSExceptionMinimumTLSVersion</key>
                <string>TLSv1.1</string>
                <key>NSIncludesSubdomains</key>
                <true/>
            </dict>
        </dict>
    </dict>
Run Code Online (Sandbox Code Playgroud)

注意:问题出现在10分钟以上的视频上。这是正常的吗?

audiotoolbox ios avplayer swift

8
推荐指数
1
解决办法
3542
查看次数

音频会话服务:kAudioSessionProperty_OverrideAudioRoute,具有不同的输入和输出路径

我正在搞乱音频会话服务.我正在尝试将音频路由设置AudioSessionSetProperty: kAudioSessionProperty_OverrideAudioRoutekAudioSessionOverrideAudioRoute_Speaker.

问题是它改变了输入和输出的路径.我想要的是从耳机的麦克风输入设置,并通过扬声器输出.

有任何想法吗?

泰!

iphone objective-c core-audio audiotoolbox ios

7
推荐指数
1
解决办法
3033
查看次数

如何取消以AudioServicesPlaySystemSound开头的播放声音?

有没有办法取消,暂停或停止通过调用AudioServicesPlaySystemSound()开始播放的声音?

iphone core-audio audiotoolbox ios

7
推荐指数
1
解决办法
3871
查看次数

将PCM(CMSampleBufferRef)编码到iOS上的AAC - 如何设置频率和比特率?

我想将PCM(CMSampleBufferRef(s)上线)编码AVCaptureAudioDataOutputSampleBufferDelegate到AAC中.

当第一个CMSampleBufferRef到达时,我AudioStreamBasicDescription根据文档设置(进/出)(s),"out"

AudioStreamBasicDescription inAudioStreamBasicDescription = *CMAudioFormatDescriptionGetStreamBasicDescription((CMAudioFormatDescriptionRef)CMSampleBufferGetFormatDescription(sampleBuffer));

AudioStreamBasicDescription outAudioStreamBasicDescription = {0}; // Always initialize the fields of a new audio stream basic description structure to zero, as shown here: ...
outAudioStreamBasicDescription.mSampleRate = 44100; // The number of frames per second of the data in the stream, when the stream is played at normal speed. For compressed formats, this field indicates the number of frames per second of equivalent decompressed data. The mSampleRate field …
Run Code Online (Sandbox Code Playgroud)

audio aac core-audio audiotoolbox ios

7
推荐指数
1
解决办法
8153
查看次数