Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios4 使用iphonesdk进行文本到语音转换_Ios4_Avaudioplayer_Text To Speech - Fatal编程技术网

Ios4 使用iphonesdk进行文本到语音转换

Ios4 使用iphonesdk进行文本到语音转换,ios4,avaudioplayer,text-to-speech,Ios4,Avaudioplayer,Text To Speech,我对使用一些输入文本生成演讲非常陌生。我用下面的例子尝试了一下,我成功了。这个演讲是男人的声音,但我需要让它成为女人的声音。有可能处理这个吗?。伙计们,你们能给我建议一下,我们可以在这里改变什么设置吗 #import <Foundation/Foundation.h> #import <AVFoundation/AVFoundation.h> @interface FliteTTS : NSObject <AVAudioPlayerDelegate> {

我对使用一些输入文本生成演讲非常陌生。我用下面的例子尝试了一下,我成功了。这个演讲是男人的声音,但我需要让它成为女人的声音。有可能处理这个吗?。伙计们,你们能给我建议一下,我们可以在这里改变什么设置吗

#import <Foundation/Foundation.h>
#import <AVFoundation/AVFoundation.h>


@interface FliteTTS : NSObject <AVAudioPlayerDelegate> 
{
    //NSData *soundObj;     // doesn't work yet - see note in FliteTTS.m
    AVAudioPlayer* audioPlayer;
}

// Use these:
-(void)speakText:(NSString *)text;
-(void)stopTalking;
-(void)setPitch:(float)pitch variance:(float)variance speed:(float)speed;
-(void)setVoice:(NSString *)voicename;
@end


#import "FliteTTS.h"
#import "flite.h"

cst_voice *register_cmu_us_kal();
cst_voice *register_cmu_us_kal16();
cst_voice *register_cmu_us_rms();
cst_voice *register_cmu_us_awb();
cst_voice *register_cmu_us_slt();
cst_voice *register_usenglish();
cst_wave *sound;
cst_voice *voice;

@implementation FliteTTS

-(id)init
{
    self = [super init];
    flite_init();
    // Set a default voice
    //voice = register_cmu_us_kal();
    //voice = register_cmu_us_kal16();
    //voice = register_cmu_us_rms();
    //voice = register_cmu_us_awb();
    //voice = register_cmu_us_slt();
    [self setVoice:@"cmu_us_kal"];
    return self;
}

-(void)speakText:(NSString *)text
{
    NSMutableString *cleanString;
    cleanString = [NSMutableString stringWithString:@""];
    if([text length] > 1)
    {
        int x = 0;
        while (x < [text length])
        {
            unichar ch = [text characterAtIndex:x];
            [cleanString appendFormat:@"%c", ch];
            x++;
        }
    }
    if(cleanString == nil)
    {       // string is empty
        cleanString = [NSMutableString stringWithString:@""];
    }
    sound = flite_text_to_wave([cleanString UTF8String], voice);




    NSArray *filePaths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory,   NSUserDomainMask, YES);
    NSString *recordingDirectory = [filePaths objectAtIndex: 0];
    // Pick a file name
    NSString *tempFilePath = [NSString stringWithFormat: @"%@/%s", recordingDirectory, "temp.wav"];
    printf("\n TempFilePath:%s",[tempFilePath UTF8String]);

    // save wave to disk
    char *path; 
    path = (char*)[tempFilePath UTF8String];
    cst_wave_save_riff(sound, path);


    // Play the sound back.
    NSError *err;
    [audioPlayer stop];
    audioPlayer =  [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL  fileURLWithPath:tempFilePath] error:&err];
    [audioPlayer setDelegate:self];
    [audioPlayer prepareToPlay];
    [audioPlayer play];
    // Remove file
    [[NSFileManager defaultManager] removeItemAtPath:tempFilePath error:nil];

}

-(void)setPitch:(float)pitch variance:(float)variance speed:(float)speed
{
    feat_set_float(voice->features,"int_f0_target_mean", pitch);
    feat_set_float(voice->features,"int_f0_target_stddev",variance);
    feat_set_float(voice->features,"duration_stretch",speed); 
}

-(void)setVoice:(NSString *)voicename
{
    if([voicename isEqualToString:@"cmu_us_kal"]) {
        voice = register_cmu_us_kal();
    }
    else if([voicename isEqualToString:@"cmu_us_kal16"]) {
        voice = register_cmu_us_kal16();
    }
    else if([voicename isEqualToString:@"cmu_us_rms"]) {
        voice = register_cmu_us_rms();
    }
    else if([voicename isEqualToString:@"cmu_us_awb"]) {
        voice = register_cmu_us_awb();
    }
    else if([voicename isEqualToString:@"cmu_us_slt"]) {
        voice = register_cmu_us_slt();
    }

}

-(void)stopTalking
{
    [audioPlayer stop];
}

@end
#导入
#进口
@接口flitets:NSObject
{
//NSData*soundObj;//还不起作用-请参见flitets.m中的注释
AVAudioPlayer*音频播放器;
}
//使用这些:
-(void)speakText:(NSString*)文本;
-(无效)停止说话;
-(void)设置俯仰:(浮动)俯仰变化:(浮动)变化速度:(浮动)速度;
-(void)setVoice:(NSString*)voicename;
@结束
#导入“flitets.h”
#导入“flite.h”
cst_语音*寄存器_cmu_us_kal();
cst_语音*寄存器_cmu_us_kal16();
cst_语音*寄存器_cmu_us_rms();
cst_语音*寄存器_cmu_us_awb();
cst_语音*寄存器_cmu_us_slt();
cst_语音*寄存器_使用英语();
cst_波*声;
cst_语音*语音;
@实施小册子
-(id)init
{
self=[super init];
flite_init();
//设置默认语音
//voice=寄存器_cmu_us_kal();
//voice=寄存器_cmu_us_kal16();
//voice=寄存器\u cmu\u us\u rms();
//voice=寄存器\u cmu\u us\u awb();
//voice=寄存器_cmu_us_slt();
[自设语音:@“cmu_us_kal”];
回归自我;
}
-(无效)speakText:(NSString*)文本
{
NSMutableString*cleanString;
cleanString=[NSMutableString stringWithString:@”“];
如果([文本长度]>1)
{
int x=0;
而(x<[文本长度])
{
unichar ch=[文本字符索引:x];
[cleanString appendFormat:@“%c”,ch];
x++;
}
}
if(cleanString==nil)
{//字符串为空
cleanString=[NSMutableString stringWithString:@”“];
}
声音=从文本到波浪([cleanString UTF8String],声音);
NSArray*FilePath=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,是);
NSString*recordingDirectory=[FilePath对象索引:0];
//选择一个文件名
NSString*tempFilePath=[NSString stringWithFormat:@“%@/%s”,recordingDirectory,“temp.wav”];
printf(“\n TempFilePath:%s,[TempFilePath UTF8String]);
//将wave保存到磁盘
字符*路径;
path=(char*)[tempFilePath UTF8String];
cst_wave_save_riff(声音、路径);
//把声音放回去。
n错误*错误;
[音频播放器停止];
audioPlayer=[[AVAudioPlayer alloc]initWithContentsOfURL:[NSURL fileURLWithPath:tempFilePath]错误:&err];
[音频播放器设置代表:自我];
[音频播放器准备播放];
[音频播放器播放];
//删除文件
[[NSFileManager defaultManager]removeItemAtPath:tempFilePath错误:nil];
}
-(无效)设置俯仰:(浮动)俯仰变化:(浮动)变化速度:(浮动)速度
{
专长设置浮动(语音->功能,“int\u f0\u target\u mean”,音高);
专长设置浮动(语音->功能,“int\u f0\u target\u stddev”,变化);
专长设置浮动(语音->功能,“持续时间拉伸”,速度);
}
-(void)setVoice:(NSString*)voicename
{
if([voicename isEqualToString:@“cmu_us_kal”]){
voice=寄存器_cmu_us_kal();
}
else if([voicename IsequalString:@“cmu U us_kal16”]){
voice=寄存器_cmu_us_kal16();
}
else if([voicename IsequalString:@“cmu us_rms”]){
voice=寄存器\u cmu\u us\u rms();
}
else if([voicename IsequalString:@“cmu美国awb”]){
voice=寄存器\u cmu\u us\u awb();
}
else if([voicename IsequalString:@“cmu us\U slt”]){
voice=寄存器_cmu_us_slt();
}
}
-(无效)停止说话
{
[音频播放器停止];
}
@结束
提前感谢,,
Sekhar

呼叫
设置语音:@“cmu_us_slt”
设置女性语音。对于带有美国口音的男声,如果我在AVSpeechSynthesizer(iOS 7)上找到了一篇好文章,请拨打
setVoice:@“cmu\U US\U rms”

Arabic (Saudi Arabia) - ar-SA
Chinese (China) - zh-CN
Chinese (Hong Kong SAR China) - zh-HK
Chinese (Taiwan) - zh-TW
Czech (Czech Republic) - cs-CZ
Danish (Denmark) - da-DK
Dutch (Belgium) - nl-BE
Dutch (Netherlands) - nl-NL
English (Australia) - en-AU
English (Ireland) - en-IE
English (South Africa) - en-ZA
English (United Kingdom) - en-GB
English (United States) - en-US
Finnish (Finland) - fi-FI
French (Canada) - fr-CA
French (France) - fr-FR
German (Germany) - de-DE
Greek (Greece) - el-GR
Hindi (India) - hi-IN
Hungarian (Hungary) - hu-HU
Indonesian (Indonesia) - id-ID
Italian (Italy) - it-IT
Japanese (Japan) - ja-JP
Korean (South Korea) - ko-KR
Norwegian (Norway) - no-NO
Polish (Poland) - pl-PL
Portuguese (Brazil) - pt-BR
Portuguese (Portugal) - pt-PT
Romanian (Romania) - ro-RO
Russian (Russia) - ru-RU
Slovak (Slovakia) - sk-SK
Spanish (Mexico) - es-MX
Spanish (Spain) - es-ES
Swedish (Sweden) - sv-SE
Thai (Thailand) - th-TH
Turkish (Turkey) - tr-TR

希望这对您有所帮助

您在flite库中有四种声音,您可以使用[fliteEngine setVoice:@“cmu us_slt”];设置新语音后清理所有目标我也在从事同一类型的项目,我想制作儿童语音是否可以使用setVoice属性制作…您好,谢谢您的回复,是否可以使用不同的国家/地区口音?。请建议me@Chandrasekhar检查我的答案,它可能会帮助你