0
我移植從WP8需要的是可以重疊的各種聲音的回放的應用程序。我迄今發現它使用MediaElement的唯一方法,但這不允許重疊的聲音。如何在winrt中播放重疊音頻?
問題 - 什麼是用來玩重疊音頻的最簡單,最好的音頻引擎?理想情況下,我需要一個關於如何做到這一點的小例子。
我看着WASAPI(http://code.msdn.microsoft.com/windowsapps/Windows-Audio-Session-22dcab6b),但它並不像它支持簡單的再現?
也許我可以包裝MediaFoundation和WinRT的稱呼呢? (MediaEngine audio playback on WinRT)
這是我現在的代碼,但是當我玩一個新的聲音它切斷之前打一個,而不是將它們混合。
ThreadUtility.runOnUiThread(
async delegate()
{
// TODO doesn't allow sounds to overlap!
Uri uri = new Uri(R.base_uri, R.raw.URI_PREFIX + resourceId);
StorageFile storageFile =
await Windows.Storage.StorageFile.GetFileFromApplicationUriAsync(
uri);
MediaElement element = new MediaElement();
var randomAccessStream = await storageFile.OpenReadAsync();
element.SetSource(randomAccessStream, storageFile.ContentType);
element.Volume = volume;
element.PlaybackRate = pitch;
//TODO element.Pan = pan;
element.Play();
}
);
SOLUTION(根據菲利普的回答):
在頁面類:
var mediaElements = new LinkedList<MediaElement>();
{
for (int channel = 0; channel < TeacherSoundGroover.NUM_CHANNELS; channel++)
{
var mediaElement = new MediaElement();
mediaElements.add(mediaElement);
// Must be in the tree otherwise it won't overlap!
m_titlePanel.Children.Add(mediaElement);
}
}
m_soundPlayer = new MySoundPlayer(mediaElements);
}
在MySoundPlayer類
:
ThreadUtility.runOnUiThread(
async delegate()
{
Uri uri = new Uri(R.base_uri, R.raw.URI_PREFIX + resourceId);
StorageFile storageFile =
await Windows.Storage.StorageFile.GetFileFromApplicationUriAsync(
uri);
if(m_mediaElements != null)
{
int count = m_mediaElements.size();
if (count > 0)
{
int channel = m_nextMediaElementToUse % count;
m_nextMediaElementToUse++;
MediaElement element = m_mediaElements.get(channel);
var randomAccessStream = await storageFile.OpenReadAsync();
element.Stop();
element.DefaultPlaybackRate = rate;
element.SetSource(randomAccessStream, storageFile.ContentType);
element.Volume = volume;
element.Balance = pan;
element.Play();
}
}
}
);
我已經創建multile MediaElement的控制---看到上面的代碼片斷。我會看看SharpDX,謝謝 – swinefeaster
MediaElement允許多個音軌同時播放多個控件實例。也許所有需要被添加到UI樹? –
其實,這是否有竅門!奇怪的是需要將它們添加到樹中。將使用解決方案代碼更新我的問題。 – swinefeaster