1

Mac OS X でさまざまな声をすべて取得し、性別で並べ替えようとするアプリケーションを作成しています。各性別 (男性、女性、ノベルティ) の声を入れるために 3 つの可変配列を作成し、列挙を使用してそれぞれを調べて正しい配列に入れています。残念ながら、それは機能していません。ノベルティ配列以外はすべて空になり、ノベルティ配列には 1 つの声、Zarvox しかありません。誰かが私が間違っていることを見ていますか? 以下のコードを投稿しました。

NSArray* voices = [NSSpeechSynthesizer availableVoices]; 
for(NSString* x in voices){

    NSDictionary* voiceInfo = [NSSpeechSynthesizer attributesForVoice:x];

    NSString* voiceName = [voiceInfo objectForKey:NSVoiceName];
    NSString* voiceGender = [voiceInfo objectForKey:NSVoiceGender];


    maleVoices = [[NSMutableArray alloc] init];
    femaleVoices = [[NSMutableArray alloc] init];
    noveltyVoices = [[NSMutableArray alloc] init];

    if (voiceGender == NSVoiceGenderMale){
        [maleVoices addObject:voiceName];

    } else if (voiceGender == NSVoiceGenderFemale) {
        [femaleVoices addObject:voiceName];
    } else {

        [noveltyVoices addObject:voiceName];
    }
}
4

2 に答える 2

4

maleVoicesfemaleVoices、およびをループnoveltyVoicesの外側に割り当てます。forループの反復ごとに新しい空の配列を作成しているだけです。

于 2011-07-11T19:26:50.307 に答える
2

通常、文字列との直接の等値比較は信頼できません。-isEqualToString:次の方法を使用します。

if([voiceGender isEqualToString:NSVoiceGenderMale]){
    // etc.
于 2011-07-11T19:26:19.173 に答える