小编Dra*_*hix的帖子

Android - MediaPlayer HTTP 错误处理

我正在尝试创建一个 Android 应用程序,它收集各种远程歌曲链接并为用户播放。该应用程序使用 Android 的 MediaPlayer,每首歌曲链接都重定向到 MediaPlayer 处理并最终播放的 Stream URL。

但是,其中一些歌曲链接实际上会重定向并提供HTTP 404 错误,因为它们不可用,我想知道是否有任何方法可以立即直接处理/捕获这些 HTTP 错误。到目前为止,MediaPlayer 所做的是发出信号:

error (1, -2147483648)

...在它尝试与数据源连接10 次之后,我可以捕获它以通知用户该歌曲不可用。

当然,让用户等待 10 次重试需要太多时间,所以我想知道是否有办法捕获 MediaPlayer 发生 HTTP 错误的第一刻,而无需在发送之前检查 URL到 MediaPlayer,或者必须使用连接到 MediaPlayer 的网络代理来破解和管理异常。

MediaPlayer 给出的异常 10 次:

07-16 05:16:30.549: E/MediaHTTPConnection(16698): IOException: java.io.IOException: Http Response: 404

java android android-mediaplayer

5
推荐指数
1
解决办法
1385
查看次数

按比例索引转换音符

我正在尝试创建一种算法,根据给定的比例和转置因子向上或向下转换音符.

当前算法:

public Note getNoteByScale(Scale scale, int transposeFactor) {
    int newPitch = scale.getScaleIndex(this.pitch) + transposeFactor;
    int newOctave = this.octave;

    if (newPitch > 6) {
        newPitch -= 7;
        newOctave++;
    }
    if (newPitch < 0) {
        newPitch += 7;
    }

    return Note.createNote(scale.getNotesInScale().get(newPitch),
            newOctave, this.duration);
}
Run Code Online (Sandbox Code Playgroud)

每个尺度(表示为此目的的主要尺度)有7个音符.例如,C-Major Scale有以下注释:

C, D, E, F, G, A, and B
Run Code Online (Sandbox Code Playgroud)

如果您要使用上述算法的这个音阶来转换音符,例如,在C-Major音阶中的5个八度的八度音符上的'B'音符,算法将按预期工作并返回音符' C'(刻度的0指数)在6的倍频程上.

但是,假设我们使用了由笔记组成的D-Major Scale

D, E, F?, G, A, B, and C?
Run Code Online (Sandbox Code Playgroud)

对于这个音阶,最后一个音符'C♯'应该被认为比音阶中的其他音符高八度.例如,如果我们使用上面的算法将音符'B'(索引6)转换为5的八度音程,那么算法实际上会在5的八度音程上给出音符'C♯',这是完全错误的:它应该在6的八度.

Note original = Note.createNote(Pitch.B, 5, Duration.WHOLE);
// Prints: [Note: [pitch: C#],[octave: 5]]
System.out.println(original.getNoteByScale(Scale.D_MAJOR, 1)); …
Run Code Online (Sandbox Code Playgroud)

java algorithm audio

4
推荐指数
1
解决办法
1527
查看次数

标签 统计

java ×2

algorithm ×1

android ×1

android-mediaplayer ×1

audio ×1