Winform воспроизводит звук из ресурсов [дубликат]

Всегда используйте ответ Джона Клемента .


globals() возвращает словарь, поддерживающий глобальное пространство имен, после чего вы можете рассматривать его как любой другой словарь. Вы не должны этого делать. Это приводит к загрязнению пространства имен, может переопределять существующие переменные и затрудняет отладки проблем, возникающих в результате этого.

for name in names:
    globals().setdefault(name, [])
apple.append('red')
print(apple)  # prints ['red']

Вам нужно было заранее знать, что список содержит «яблоко» в порядке позже ссылаться на переменную «apple», после чего вы могли бы определить эту переменную как обычно. Поэтому на практике это не полезно. Учитывая, что ответ Джона также дает словарь, нет смысла использовать globals.

33
задан Evan Mulawski 31 May 2013 в 20:14
поделиться

4 ответа

Вам нужно быть осторожным в сборщике мусора, освобождающем память, используемую вашим звуком, пока звук все еще играет. Хотя это редко случается, когда это происходит, вы просто будете играть в случайную память. Для этого есть решение, в комплекте с исходным кодом для достижения того, что вы хотите здесь: http://msdn.microsoft.com/en-us/library/dd743680 (VS.85) .aspx

Прокрутите до самого нижнего уровня в разделе «Содержимое сообщества».

2
ответ дан Brad 18 August 2018 в 19:08
поделиться

Когда вам нужно добавить звуки в свой проект, вы сделаете это, сыграв .wav файл (ы). Затем вам нужно добавить файлы .wav, подобные этому.

   using System.Media; //write this at the top of the code

   SoundPlayer my_wave_file = new SoundPlayer("F:/SOund wave file/airplanefly.wav");
   my_wave_file.PlaySync(); // PlaySync means that once sound start then no other activity if form will occur untill sound goes to finish

Помните, что вам нужно записать путь к файлу с форматированием слэшей (/), не используйте обратные косые черты (\) при указании пути к файлу, иначе вы получите сообщение об ошибке.

Также обратите внимание: если вы хотите, чтобы во время воспроизведения звучания звучали другие вещи, вы можете изменить my_wave_file.PlaySync(); с my_wave_file.PlayAsync();.

0
ответ дан David Wheatley 18 August 2018 в 19:08
поделиться

Поскольку mySoundFile является Stream, вы можете воспользоваться перегруженным конструктором SoundPlayer, который принимает объект Stream:

System.IO.Stream str = Properties.Resources.mySoundFile;
System.Media.SoundPlayer snd = new System.Media.SoundPlayer(str);
snd.Play();

Документация класса SoundPlayer (MSDN)

40
ответ дан Peter Mortensen 18 August 2018 в 19:08
поделиться
  • 1
    Это вызовет исключение в Windows CE, поскольку оно не будет автоматически преобразовывать ресурс из байта [] в поток. В этом сценарии я нашел следующий ответ. Оставляя его здесь для других: stackoverflow.com/questions/1900707/… – Hagelt18 31 December 2014 в 19:21
  • 2
    Нам фактически не нужно объявлять отдельную переменную потока;) – TomeeNS 10 June 2016 в 00:00
  • 3
    @TomeeNS: Конечно, но это показывает людям тип ресурса и перегрузку конструктора SoundPlayer, который используется. – Evan Mulawski 13 June 2016 в 13:51
  • 4
    Этот ответ лучше, чем отмеченный ответ, потому что вам не нужны дополнительные классы, которые могут быть устаревшими. Кроме того, Writer также вводил пространства имен. – René W. 25 July 2018 в 16:35

a) ОК, сначала добавьте аудиофайл (.wav) в ресурс проекта.

  1. Откройте «Обозреватель решений» на панели инструментов меню («VIEW») или просто нажмите Ctrl + Alt + L ,
  2. Нажмите на раскрывающийся список «Свойства».
  3. Затем выберите «Resource.resx» и нажмите enter.

open project resource [/g0]

  1. Теперь выберите «Аудио» из списка списков.

add audio files to resource [/g1]

  1. Затем нажмите «Добавить ресурс», выберите аудиофайлы (.wav) и нажмите «Открыть».

browsing for audio files [/g2]

  1. Выберите аудиофайлы и измените свойства «Стойкость» на «Встраиваемые в .resx».

embedding audio files to resource [/g3]

b) Теперь просто напишите этот код, чтобы воспроизвести звук.

В этом коде я воспроизвожу аудио в событии загрузки формы.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

using System.Media; // at first you've to import this package to access SoundPlayer

namespace WindowsFormsApplication1
{
    public partial class login : Form
    {
        public login()
        {
            InitializeComponent();
        }

        private void login_Load(object sender, EventArgs e)
        {
            playaudio(); // calling the function
        }

        private void playaudio() // defining the function
        {
            SoundPlayer audio = new SoundPlayer(WindowsFormsApplication1.Properties.Resources.Connect); // here WindowsFormsApplication1 is the namespace and Connect is the audio file name
            audio.Play();
        }
    }
}

Вот и все. Все сделано, теперь запустите проект (нажмите f5) и наслаждайтесь своим звуком. Всего наилучшего. :)

35
ответ дан Pran 18 August 2018 в 19:08
поделиться
  • 1
    Именно то, что я искал! Фотографии очень помогли. Знаете ли вы, могу ли я встроить шрифт (например, fontawesome) для использования в моей программе? – Xander Luciano 2 August 2016 в 19:52
  • 2
    Когда я добавляю wav-файл, он добавляет Resource2.Designer.cs, который, кажется, является дубликатом Resource.Designer.cs, что дает мне конфликты. Это только начало происходить. Все идеи, что может произойти? screencast.com/t/xAVpE5v6b0 – Matt 7 December 2017 в 23:05
Другие вопросы по тегам:

Похожие вопросы: