如果有人碰到过的方法来生成在iPhone SDK的色调我不知道。 我想产生DTMF音,似乎无法找到任何实质性那里。 我希望能够指定多久打基调,以及(即模拟按住该按钮,而不是仅仅按下它简单..
我发现叫iPhreak一个开源的应用程序。 它理应产生双音多频傻瓜付费电话(我向你保证,这不是我的本意 - 我公司涉及基于电话对讲系统)。 与该应用程序的唯一问题是,有来自开源项目丢失的文件。 也许别人已经得到了这个项目在过去的工作?
如果任何人有我会找这样的事情,其中的任何想法,我将非常感激我的票:)
应该很容易产生自己。 考虑到硬件可以在44.1千赫(其中就一定能与一些库函数或其他),你只剩下计算波形回放PCM缓存(16位样本):
const int PLAYBACKFREQ = 44100;
const float PI2 = 3.14159265359f * 2;
void generateDTMF(short *buffer, int length, float freq1, float freq2)
{
int i;
short *dest = buffer;
for(i=0; i<length; i++)
{
*(dest++) = (sin(i*(PI2*(PLAYBACKFREQ/freq1))) + sin(i (PI2*(PLAYBACKFREQ/freq2)))) * 16383;
}
}
在16383是因为我使用的添加剂合成(只需添加正弦波一起)来完成。 因此,最大的结果是-2.0 - 2.0由16383乘以之后所以我得到更多或更少的最大16位的结果:-32768 - +32767
编辑:2个frequenties是从维基百科的文章谁接链接到其他人的frequenties。 两个不同的频率进行DTMF声音
最简单的答案是这样的:
soundArray = [[NSArray alloc] initWithObjects:
[[[SoundEffect alloc] initWithContentsOfFile: @"/System/Library/Audio/UISounds/dtmf-0.caf"] autorelease],
[[[SoundEffect alloc] initWithContentsOfFile: @"/System/Library/Audio/UISounds/dtmf-1.caf"] autorelease],
[[[SoundEffect alloc] initWithContentsOfFile: @"/System/Library/Audio/UISounds/dtmf-2.caf"] autorelease],
[[[SoundEffect alloc] initWithContentsOfFile: @"/System/Library/Audio/UISounds/dtmf-3.caf"] autorelease],
[[[SoundEffect alloc] initWithContentsOfFile: @"/System/Library/Audio/UISounds/dtmf-4.caf"] autorelease],
[[[SoundEffect alloc] initWithContentsOfFile: @"/System/Library/Audio/UISounds/dtmf-5.caf"] autorelease],
[[[SoundEffect alloc] initWithContentsOfFile: @"/System/Library/Audio/UISounds/dtmf-6.caf"] autorelease],
[[[SoundEffect alloc] initWithContentsOfFile: @"/System/Library/Audio/UISounds/dtmf-7.caf"] autorelease],
[[[SoundEffect alloc] initWithContentsOfFile: @"/System/Library/Audio/UISounds/dtmf-8.caf"] autorelease],
[[[SoundEffect alloc] initWithContentsOfFile: @"/System/Library/Audio/UISounds/dtmf-9.caf"] autorelease],
[[[SoundEffect alloc] initWithContentsOfFile: @"/System/Library/Audio/UISounds/dtmf-0.caf"] autorelease],
[[[SoundEffect alloc] initWithContentsOfFile: @"/System/Library/Audio/UISounds/dtmf-pound.caf"] autorelease],
[[[SoundEffect alloc] initWithContentsOfFile: @"/System/Library/Audio/UISounds/dtmf-star.caf"] autorelease],
nil];
你有它。 一个标准的手机键盘的所有的声音,在一个阵列,准备好您的享受。
斯威夫特DTMF声音
我与生成PCM数据实验和斯威夫特这个走了过来。 此功能将产生一个[Float]
其为音频样本。 你可以发挥他们AVAudio
。
每个DTMF由一对音调,标记长度(250毫秒),一个空格长度(250毫秒)的,当然需要指定一个采样频率(8000赫兹)。 马克和空间通常是为我所说的标准人体拨号大约250毫秒。 采样频率是好玩,但需要最高频率的两倍。 为了好玩,你可以将它低于听到发生了什么。
public static func generateDTMF(frequency1 frequency1: Float, frequency2: Float, markSpace: MarkSpaceType, sampleRate: Float) -> [Float]
{
let toneLengthInSamples = 10e-4 * markSpace.0 * sampleRate
let silenceLengthInSamples = 10e-4 * markSpace.1 * sampleRate
var sound = [Float](count: Int(toneLengthInSamples + silenceLengthInSamples), repeatedValue: 0)
let twoPI = 2.0 * Float(M_PI)
for i in 0 ..< Int(toneLengthInSamples) {
// Add first tone at half volume
let sample1 = 0.5 * sin(Float(i) * twoPI / (sampleRate / frequency1));
// Add second tone at half volume
let sample2 = 0.5 * sin(Float(i) * twoPI / (sampleRate / frequency2));
sound[i] = sample1 + sample2
}
return sound
}
完整的操场上可以下载GitHub上 。