Top.Mail.Ru
Ответы

Не работает "одновременный" запуск звуков C#

Мне нужно написать программу-эмулятор синтезатор, но во время написания кода я сколько не пыталлся что-то менять, хоть с нейронкой хоть без, оно не работает, а именно то что звуки на клавишах воспроизводятся либо "по очереди" либо прерывают друг-друга.
Результатом должно быть то что если я вопроивозводил звук одной, то он не прывался, когда нажму на вторую (проще говоря как на пианино). При надобности отправлю весь код, это не такая секретная разработка


private async void MainForm_KeyDown(object sender, KeyEventArgs e)

{

if (!_sounds.TryGetValue(e.KeyCode, out byte[] soundData))

return;

try

{

await Task.Run(() => WaveGenerator.PlayNote(e.KeyCode, soundData))

.ConfigureAwait(false); // Избегаем лишних возвратов в UI-поток

}

catch (ObjectDisposedException ex)

{

Debug.WriteLine($"Ошибка воспроизведения (объект уничтожен): {ex.Message}");

}

catch (Exception ex)

{

Debug.WriteLine($"Критическая ошибка воспроизведения: {ex.Message}");

}

}

/////////////

public static void PlayNote(Keys key, byte[] wavData)

{

// Останавливаем предыдущий звук этой клавиши, если он есть

if (_activePlayers.TryRemove(key, out var oldPlayer))

{

oldPlayer.Stop();

oldPlayer.Dispose();

}

// Запускаем новый звук в отдельном потоке

Task.Run(() =>

{

try

{

using (var stream = new MemoryStream(wavData))

using (var player = new SoundPlayer(stream))

{

// Не блокируем словарь, т.к. SoundPlayer не поддерживает нормальное управление

player.PlaySync(); // Блокирует только текущий Task

}

}

catch { /* Логирование ошибок */ }

});

}

Только авторизированные пользователи могут оставлять свои ответы
Дата
Популярность
Аватар пользователя
Искусственный Интеллект
Изменено

Ну ты ж сам пишешь await, правильно? Вот он и ждет.

Запускай потоки и не жди их окончания.

Но я не уверен, что это сработает. Проигрывание нот - это не просто генерирование какой-то частоты. Там куча всяких гармоник, а проигрывание нескольких нот одновременно создает гармоники высших порядков. Аккорд - это вам не цицки-пецки. Поэтому эффекты у тебя могут быть самые странные, вплоть до всякого там треска, что связано с самой природой дискретизации всего и вся в цифровых устройствах.

Аватар пользователя
Новичок

penes