推送語音隊列播報

使用場景:我們的產(chǎn)品需求是當多個顧客同時向商戶發(fā)起支付時,App 收到多條推送,客戶端需要逐一語音播報。
解決存在的問題:當出現(xiàn)多條推送時只有最后一條語音會被完整播報,前面的語音會被中斷。
解決方案:這里就簡單的介紹一下實現(xiàn)推送語音播報的一種方案,已上線運行。
一、當我們需要實現(xiàn)這么一個需求時,無非需要考慮以下幾種條件:
1、如何獲取每條語音的時長;
2、如何監(jiān)聽語音何時播報結束;
3、如何從隊列取出和刪除。
我們項目中項目處于前臺時語音播報采用的是訊飛的方案,因此我們可以在訊飛的 API 里面看到有一個開始播報和結束回調(diào)的方法:
/*!
 *  開始合成(播放)
 *   調(diào)用此函數(shù)進行合成,如果發(fā)生錯誤會回調(diào)錯誤`onCompleted`
 *
 *  @param text 合成的文本,最大的字節(jié)數(shù)為1k
 */
- (void) startSpeaking:(NSString *)text;

/**
 *  結束回調(diào)
 *  當整個合成結束之后會回調(diào)此函數(shù)
 *
 *  @param error 錯誤碼
 */
- (void) onCompleted:(IFlySpeechError*) error;
有了這個方法,我們只需要考慮好上面提出的第三個因素。
二、實現(xiàn)的步驟:
①首先我們需要接收到需要播報的內(nèi)容;
@property (nonatomic , copy) NSString  *voiceContent;
②聲明一個播報的方法;
- (void)play;
③初始化并調(diào)用播報方法;
- (void)setTitleVoice:(NSString *)titleVoice
{
    [self.voiceArr addObject:titleVoice];
    _titleVoice = titleVoice;
    [self play];
}

/**
 實現(xiàn)隊列播報,并從數(shù)據(jù)源中刪除已經(jīng)播報的語音
 */
- (void)play
{
    NSOperationQueue *queue = [NSOperationQueue mainQueue];
    if (self.isPlay) {
        _titleVoice = self.voiceArr[0];
        [queue addOperation:[self customOperation:_titleVoice]];
        self.isPlay = false;
        [self.voiceArr removeObjectAtIndex:0];
    }
}

- (NSOperation *)customOperation:(NSString *)content {
    NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:^{
        @autoreleasepool {
            if (content.length == 0) {
                return;
            }
            [self.iFlySpeechSynthesizer startSpeaking:content];
        }
    }];
    return operation;
}

/**
 合成結束(完成)回調(diào)
 ****/
- (void)onCompleted:(IFlySpeechError *) error
{
    self.isPlay = true;
    if (self.voiceArr.count > 0) {
        [self play];
    }
}
至此,我們就簡單的實現(xiàn)了隊列播報的這么一個需求,使用第三方可以減少工作量。如果發(fā)現(xiàn)上面內(nèi)容有出入在留言提出,有更好的方案也可以交流。
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容