2010-12-28 32 views
6

Gần đây tôi đã mua được Samsung Galaxy S, bản cập nhật Android 2.1 và sau khi chạy ứng dụng của tôi, tôi thấy rằng một số hiệu ứng âm thanh phát hai lần đồng thời. Điều này là kỳ lạ vì các hiệu ứng âm thanh thể hiện hành vi này có vẻ ngẫu nhiên - trên một số trường hợp một số sẽ chơi hai lần trên những người khác, họ sẽ chơi một lần như mong đợi. Lỗi này chưa được báo cáo trên bất kỳ nền tảng phần cứng nào khác cho ứng dụng của tôi. Tôi đã chỉ nhìn thấy một sự cố được báo cáo về điều này trên trang web này và người đã chuyển sang sử dụng MediaPlayer tuy nhiên tôi thực sự muốn nhận được một biện pháp khắc phục cho điều này.Vấn đề với Soundpool và Samsung Galaxy S

Khi ứng dụng được chạy nó khởi Soundpool như sau,

fx
public static final int SOUND_EXPLOSION = 1; 
public static final int SOUND_CLEAR = 2; 
public static final int SOUND_CLICK = 3; 
public static final int SOUND_MAGIC = 4; 
public static final int SOUND_ROCKET = 5; 
public static final int SOUND_MELT = 6; 

private SoundPool soundPool; 
private AudioManager mgr; 
private HashMap<Integer, Integer> soundPoolMap; 

private void initSounds() 
{ 
    soundPool = new SoundPool(4, AudioManager.STREAM_MUSIC, 100); 

    soundPoolMap = new HashMap<Integer, Integer>(); 

    soundPoolMap.put(SOUND_EXPLOSION, soundPool.load(getContext(), R.raw.explosion3, 1)); 
    soundPoolMap.put(SOUND_CLEAR, soundPool.load(getContext(), R.raw.pop, 1)); 
    soundPoolMap.put(SOUND_CLICK, soundPool.load(getContext(), R.raw.click, 1)); 
    soundPoolMap.put(SOUND_MAGIC, soundPool.load(getContext(), R.raw.swoosh, 1)); 
    soundPoolMap.put(SOUND_ROCKET, soundPool.load(getContext(), R.raw.rocket, 1)); 
    soundPoolMap.put(SOUND_MELT, soundPool.load(getContext(), R.raw.melt3, 1)); 
    mgr = (AudioManager)getContext().getSystemService(Context.AUDIO_SERVICE); 
} 

Sound sau đó được chơi bằng cách gọi phụ sau đây, (PlaySound là một toàn cầu toggled bởi các tùy chọn người dùng)

public void playSound(int sound) 
{ 


if (PlaySound == true) 
{ 
    Log.w("playSound","Playing Sound" + sound);   
    float streamVolumeCurrent = mgr.getStreamVolume(AudioManager.STREAM_MUSIC); 
    float streamVolumeMax = mgr.getStreamMaxVolume(AudioManager.STREAM_MUSIC);  
    float volume = streamVolumeCurrent/streamVolumeMax; 
    soundPool.play(soundPoolMap.get(sound), volume, volume, 1, 0, 1f); 
} 

} 

Như bạn có thể thấy có một cuộc gọi nhật ký mà tôi đã sử dụng để xem số lần phụ được gọi mặc dù điều này cho thấy rằng khi lỗi xảy ra, thường trình này chỉ được gọi một lần khi âm thanh được nghe hai lần từ thiết bị.

Tôi cũng có một phụ cuối cùng được gọi khi chế độ xem bề mặt bị phá hủy để dọn dẹp.

public void ReleaseSounds() 
{ 
    if (soundPool != null) 
    { 

    soundPool.release(); 
    soundPool = null; 

    } 
} 

Có ai khác có vấn đề này, nếu bạn giải quyết vấn đề này như thế nào? Bất kỳ sự giúp đỡ về vấn đề này sẽ được đánh giá rất nhiều,

Nhiều cảm ơn trước

+0

Ok ngày đầu nhưng vấn đề dường như đã biến mất. Các tập tin âm thanh trong thư mục thô là một kết hợp của wav và mp3 - (các định dạng gốc), tôi đã chuyển đổi chúng sang định dạng OGG và từ thử nghiệm ban đầu nó có vẻ ổn định hơn. – Steven

Trả lời

8

Chuyển đổi file âm thanh sang OGG trong thư mục nguyên dường như đã giải quyết lỗi này - tôi đã không nhìn thấy một sự lặp lại của nó kể từ đó.

+1

Bạn may mắn - mp3 + tai nạn âm thanh trên một số điện thoại, hoạt động với những người khác. Tôi cũng chuyển sang OGG, mặc dù họ cũng không nén. – richq

+0

Điều này dường như để giải quyết lỗi kỳ lạ này cho tôi cũng ... (wav-> ogg) Cảm ơn! – sstn

+0

Điện thoại Android có bộ giải mã phần cứng cho ogg không? – slf

Các vấn đề liên quan