56 / 56 / 26
Регистрация: 13.11.2013
Сообщений: 234
Записей в блоге: 1
1
.NET 4.x

Воспроизвести звук определённой частоты через звуковую карту

01.06.2014, 02:05. Показов 3077. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
вообщем пишу виртуальное пианино.при нажатие на кнопку надо воспроизвести определённый звук определённой частотой . пробовал beep но это через системный динамик да и звук не красивый. при ходит на ум ещё одна идея каждую ноту синтезировать и в отдельный файл но это тоже самоубийство.есть ли нормальный способ ?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.06.2014, 02:05
Ответы с готовыми решениями:

Выводить звук через звуковую карту встроеную & USB
Хочу получить в итоге звук идущий сразу из колонок и наушников. Передние гнёзда (входы) для...

Звук из разных плееров а наушниках через внешнюю звуковую карту
Доброго всем дня. Начну издалека. У меня есть звуковая карта sound blaster x-fi подключённая к...

Определить, поступает ли на звуковую карту звук
Привет всем. Подскажите пожалуйста как можно реализовать следущую штуку: нужно определить поступает...

Воспроизвести звук заданной частоты
как задать звук и его частоту, для симуляции нот в паскаль? помогите.очень надо для лабы.

2
0 / 0 / 0
Регистрация: 12.02.2014
Сообщений: 10
01.06.2014, 04:34 2
По-моему синтезировать каждую ноту в отдельный файл - это самый реальный вариант. В противном случае тебе придётся работать с дровами
0
3631 / 2549 / 712
Регистрация: 02.08.2011
Сообщений: 6,885
01.06.2014, 08:38 3
Лучший ответ Сообщение было отмечено pavelDev как решение

Решение

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
// your own wave provider
 public abstract class WaveProvider32 : IWaveProvider
    {
        private WaveFormat waveFormat;
 
        public WaveProvider32() : this(44100, 1) { }
       
 
        public WaveProvider32(int sampleRate, int channels)
        {
            SetWaveFormat(sampleRate, channels);
        }
 
        public void SetWaveFormat(int sampleRate, int channels)
        {
            this.waveFormat = WaveFormat.CreateIeeeFloatWaveFormat(sampleRate, channels);            
        }
 
        public int Read(byte[] buffer, int offset, int count)
        {
            WaveBuffer waveBuffer = new WaveBuffer(buffer);
            int samplesRequired = count / 4;
            int samplesRead = Read(waveBuffer.FloatBuffer, offset / 4, samplesRequired);
            return samplesRead * 4;
        }
 
        public abstract int Read(float[] buffer, int offset, int sampleCount);
 
        public WaveFormat WaveFormat
        {
            get { return waveFormat; }
            
        }
 
    }
    
    // concrete implementation 
    public class SineWaveProvider32 : WaveProvider32
    {
        int sample;
 
        public SineWaveProvider32()
        {
            Frequency = 1000; // <--  This is your frequency
            Amplitude = 0.25f; // let's not hurt our ears            
        }
 
        public float Frequency { get; set; }
        public float Amplitude { get; set; }
 
        public override int Read(float[] buffer, int offset, int sampleCount)
        {
            int sampleRate = WaveFormat.SampleRate;
            for (int n = 0; n < sampleCount; n++)
            {
                buffer[n + offset] = (float)(Amplitude * Math.Sin((2 * Math.PI * sample * Frequency) / sampleRate));
                sample++;
                if (sample >= sampleRate) sample = 0;
            }
            return sampleCount;
        }
    }// example of using 
    var sineWaveProvider = new SineWaveProvider32();
                sineWaveProvider.SetWaveFormat(16000, 1); // 16kHz mono
                sineWaveProvider.Frequency = 500;
                sineWaveProvider.Amplitude = 0.35f;
                waveOut = new WaveOut();
                waveOut.Init(sineWaveProvider);                
                waveOut.Play();
Naudio.dll

Добавлено через 7 минут
Унаследуйте от WaveProvider свою реализацию и выбирайте любые частоты. Сверху как пример.
0
01.06.2014, 08:38
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.06.2014, 08:38
Помогаю со студенческими работами здесь

Пропал звук и комп не видит звуковую карту(Realtek)
Здравствуйте ,можете посоветовать , что можно сделать.У меня пропал звук и комп не видит звуковую...

Как отключить встроенный звук и вставить звуковую карту?
материнка asus p7p55d встроенная звуковая карта via в биосе на вкладке онборд написано...

Получить звук динамика определенной частоты
простите за нубский вопрос, но гугль либо молчит, либо дает разные результаты. допустим я хочу...

Генерировать сигналы через звуковую карту
Занимаюсь программированием относительно не долго, и тут возникла некоторая задача - можно ли...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru