Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >播放一系列没有间隙的声音(iPhone)

播放一系列没有间隙的声音(iPhone)
EN

Stack Overflow用户
提问于 2012-06-18 23:51:49
回答 2查看 956关注 0票数 0

我想也许最快的方法是使用Sound Services。它非常高效,但我需要按顺序播放声音,而不是重叠。因此,我使用了一个回调方法来检查声音何时结束。这个周期会产生大约0.3秒的延迟。我知道这听起来很严格,但它基本上是程序的主轴。

编辑:我现在尝试使用AVAudioPlayer,但如果不使用audioPlayerDidFinishPlaying,我将无法按顺序播放声音,因为这将使我处于与使用SoundServices的回调方法相同的情况。

EDIT2:我认为,如果我能以某种方式将我想要播放的声音的各个部分连接到一个大文件中,我就可以让整个音频文件连续发出声音。

EDIT3:我认为这会起作用,但音频重叠:

代码语言:javascript
运行
AI代码解释
复制
waitTime = player.deviceCurrentTime;

    for (int k = 0; k < [colores count]; k++)
    {    
        player.currentTime = 0;
        [player playAtTime:waitTime];
        waitTime += player.duration;
    }

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-26 03:12:27

我刚刚尝试了一种我认为对你很有效的技术。创建一个声音连接在一起的音频文件。然后构建一些关于你的声音的元数据,如下所示:

代码语言:javascript
运行
AI代码解释
复制
@property (strong, nonatomic) NSMutableDictionary *soundData;
@synthesize soundData=_soundData;

- (void)viewDidLoad {
    [super viewDidLoad];

    _soundData = [NSMutableDictionary dictionary];
    NSArray *sound = [NSArray arrayWithObjects:[NSNumber numberWithFloat:5.0], [NSNumber numberWithFloat:0.5], nil];
    [self.soundData setValue:sound forKey:@"soundA"];
    sound = [NSArray arrayWithObjects:[NSNumber numberWithFloat:6.0], [NSNumber numberWithFloat:0.5], nil];
    [self.soundData setValue:sound forKey:@"soundB"];
    sound = [NSArray arrayWithObjects:[NSNumber numberWithFloat:7.0], [NSNumber numberWithFloat:0.5], nil];
    [self.soundData setValue:sound forKey:@"soundC"];
}

第一个数字是文件中声音的偏移量,第二个是持续时间。然后让你的球员准备好像这样打球。

代码语言:javascript
运行
AI代码解释
复制
- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];

    NSURL *url = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/audiofile.mp3", [[NSBundle mainBundle] resourcePath]]];

    NSError *error;
    audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];
    audioPlayer.numberOfLoops = -1;

    if (audioPlayer == nil)
        NSLog(@"%@", [error description]);              
    else {
        [audioPlayer prepareToPlay];
    }
}

然后你可以像这样构建一个低级的声音播放方法...

代码语言:javascript
运行
AI代码解释
复制
- (void)playSound:(NSString *)name withCompletion:(void (^)(void))completion {

    NSArray *sound = [self.soundData valueForKey:name];
    if (!sound) return;

    NSTimeInterval offset = [[sound objectAtIndex:0] floatValue];
    NSTimeInterval duration = [[sound objectAtIndex:1] floatValue];

    audioPlayer.currentTime = offset;
    [audioPlayer play];

    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, duration * NSEC_PER_SEC), dispatch_get_current_queue(), ^{
        [audioPlayer pause];
        completion();
    });
}

你可以像这样快速组合播放声音。

代码语言:javascript
运行
AI代码解释
复制
- (IBAction)playAB:(id)sender {

    [self playSound:@"soundA" withCompletion:^{
        [self playSound:@"soundB" withCompletion:^{}];
    }];
}

与嵌套块不同,您可以构建一个更高级别的方法,该方法接受声音名称的列表并逐个播放它们,如下所示:

代码语言:javascript
运行
AI代码解释
复制
- (void)playSoundList:(NSArray *)soundNames withCompletion:(void (^)(void))completion {

    if (![soundNames count]) return completion();

    NSString *firstSound = [soundNames objectAtIndex:0];
    NSRange remainingRange = NSMakeRange(1, [soundNames count]-1);
    NSArray *remainingSounds = [soundNames subarrayWithRange:remainingRange];

    [self playSound:firstSound withCompletion:^{
        [self playSoundList:remainingSounds withCompletion:completion];
    }];
}

就像这样叫它...

代码语言:javascript
运行
AI代码解释
复制
NSArray *list = [NSArray arrayWithObjects:@"soundB", @"soundC", @"soundA", nil];
[self playSoundList:list withCompletion:^{ NSLog(@"done"); }];
票数 4
EN

Stack Overflow用户

发布于 2012-06-19 00:05:28

我假设你有时想要改变顺序或者省略发音。(否则,您将使用所有三种声音在一行中构建资源并播放该资源)。

可能有一个更好的想法,但为了让事情变得非常紧凑,你可以考虑生成连接的资产,预加载它-将所有延迟移到那个加载,然后绕过它来改变声音。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11092657

复制
相关文章
python 播放声音
#import winsound #winsound.Beep(600,1000) import os os.system("paplay 1.wav") python使用pygame播放音乐. 链接地址:https://my.oschina.net/lenglingx/blog/183101 # -*- coding: cp936 -*- import pygame pygame.mixer.init() print("播放音乐1") track = pyga
py3study
2020/01/08
1.2K0
iOS后台播放声音
或者在项目的图形化配置界面的Info项添加如下 Required background modes 类型为 Array 添加子项App plays audio or streams audio/video using AirPlay
码客说
2019/10/22
1.7K0
声如其闻,DuerOS中的声音播放
智能语音设备的特点是语音交互成为人机交互的重要方式,智能语音设备的声音输出摆脱了预置的逻辑,成为了响应式反馈,尤其是对声音输入的响应。在智能语音设备上,基于语音交互的服务被称为技能,通过诸如DBP(DuerOS Bot Platform)开放平台开发技能,进而提供基于语音交互的服务,关于面向DuerOS的技能开发可以参考《面向接口/协议?看DuerOS的技能开发》。
半吊子全栈工匠
2020/10/10
2.7K0
声如其闻,DuerOS中的声音播放
播放声音文件脚本
spawn ssh [lindex $argv 0] [lindex $argv 1]
用户1168904
2021/05/17
1.2K0
播放声音文件脚本
执行1.sh test.wav,ssh登陆到192.168.1.1服务器,root密码是123456,播放/home/temp目录下的test.wav文件,注意test.wav是变量,不是常量。
用户1168904
2021/05/17
1.2K0
LabVIEW播放提示声音或者音乐
使用LabVIEW播放提示声音或者音乐,可在LabVIEW中右键鼠标:函数→声音→输出,选择相应的函数,如下图所示:
不脱发的程序猿
2022/04/13
1.9K0
LabVIEW播放提示声音或者音乐
用Python播放和录制声音
Python语言已经无所不能了,今天就来分享一下,如何使用Python来录制和播放音频文件。
TalkPython
2019/05/24
7.2K0
MATLAB播放声音(sound函数)
算法一泡就是几十分钟,算法跑的时候忙着看手机,希望算法跑完了能够提醒一下,然后就发现了sound()函数。不得不说MATLAB的功能真是齐全,我估计数字音频处理需要这些操作吧。
里克贝斯
2021/05/21
8.2K1
在 Python 中播放声音
我们首先检查playsound库,它为在Python中播放声音文件提供了一个简单直接的解决方案。凭借其最低的设置要求,开发人员可以使用单个函数调用将音频播放快速集成到他们的应用程序中。但是,对于更高级的音频功能,我们深入研究了两个流行的库:pygame和pyglet。Pygame是一个强大的多媒体库,以其处理音频,图形和用户输入的能力而闻名。
很酷的站长
2023/08/11
8800
在 Python 中播放声音
能用 CSS 能播放声音吗?[每日前端夜话0xF1]
翻译:疯狂的技术宅 作者:Alvaro Montoro 来源:css-tricks
疯狂的技术宅
2019/12/11
2.5K0
Python 播放声音 音频与beep
#import winsound #winsound.Beep(600,1000) import os os.system("paplay 1.wav") python使用pygame播放音乐. 链接地址:https://my.oschina.net/lenglingx/blog/183101 # -*- coding: cp936 -*- import pygame pygame.mixer.init() print("播放音乐1") track = pygame.mixer.music.load("t
py3study
2020/01/07
1.7K0
Python 技术篇-pygame播放音乐没有声音,原因及解决办法
加上pygame.display.set_mode()就好了,这是加载界面的意思。
小蓝枣
2020/09/23
1.5K0
网页纯JS通过AudioContext播放声音
如果需要播放声音的话直接调用makeNoise就可以,500这个数字越大,声音的频率就越大,声调也就越高。
前Thoughtworks-杨焱
2021/12/07
6.2K0
WPF中播放声音媒体文件
这段时间我们小组要给部门的Annual Meeting準备一个WPF的抽奖程序,为了增加程序的有趣性,我们在程序中需要播放背景音乐等。由於对之前从未使用过WPF,所以对其中的声音等媒体文件播放不是很清楚,对一些简单的问题也花了相对较长的时间去解决,现在将其总结在下麵,以供大家参考。 1,使用SoundPlayer类 SoundPlayer类位於System.Media命名空间下,它只能播放.wav格式的声音文件。其使用方法简单如下: using(SoundPlayer player = new SoundP
hbbliyong
2018/03/05
2.4K0
iOS WebView内联播放视频无声音
在webview设置了 _webView.allowsInlineMediaPlayback = YES; 之后发现webview播放的视频无声音,解决方法如下,开启音频 //Enable Audio NSError *error; [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:&error]; if (error) { NSLog(@"Error in setting catego
用户4458175
2020/02/12
1.9K0
GapWorker导致RecyclerView视频播放声音残留问题
这确实是一个非常奇怪的问题,不滑动不会出现视频播放声音,必须滑动一下才能出现声音。
技术小黑屋
2020/01/23
1.7K0
苹果官宣iPod停产,iPod之父:没有它就没有iPhone
金磊 发自 凹非寺 量子位 | 公众号 QbitAI 一觉醒来,苹果官方的一个大动作让网友们感慨不已: 宣布 iPod 产品线正式停更,后续不会再推出有关该产品线的新品。 甚至TechCrunch直接将此事描述为——“iPod已死”。 这也就意味着iPod在经历20年的变迁之后,正式退出苹果的舞台。 但它毕竟作为陪伴过不少人青春的产品,许多网友对此纷纷祭出了一波回忆杀。 例如初见iPod的“第一印象”: 第一次见非常惊艳:这MP4好高级啊……还会自动调转屏幕!这操作手感! 也少不了那些年,用iPod通
量子位
2022/05/13
3320
苹果官宣iPod停产,iPod之父:没有它就没有iPhone
电脑没有声音是什么原因
在日常生活中在使用电脑中经常遇到电脑没声音的小麻烦,有时候选择重装系统也解决不了该问题,其实不必烦恼的,当出现电脑没声音的现象时,我们首先要寻找出电脑没声音是什么原因造成的。然后根据电脑没声音的原因来寻求解决办法。下面,小编跟大伙一同探讨一下电脑突然没声音的原因。
牛肉面
2021/04/09
11.3K1
点击加载更多

相似问题

iphone没有播放通知声音

10

如何在Android中循环播放没有间隙的声音?

40

在没有资源的iPhone上播放声音

10

Iphone SDK:播放“系统声音”

10

iPhone Datepicker播放“滴答”声音

30
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档