Использование C++ 11 в Visual Studio 2012, я пытаюсь звучать, что я наблюдал в Паскале. В Паскале кажется, что вы можете отправить частоту внутреннему громкоговорителю, который воспроизводит эту частоту, пока вы не скажете ей остановиться (или пока вы не скажете, чтобы она воспроизводила другую частоту). Так вот, что мне нужно:Простые звуки в C++
- я должен быть в состоянии определить частоту звука
- Звук должен иметь мало или нет разрыва (до, возможно, 5мс было бы приемлем)
- Я не хочу для использования внешних звуковых библиотек (пожалуйста, не тратьте свое время, предлагая их, если они не являются невероятно легкими и обеспечивают исключительно широкий диапазон использования)
- Предпочтительно, звук воспроизводится на внутреннем динамике, а не через компьютерные штатные динамики
Я не могу найти какие-либо совместимые с возможностями библиотеки/заголовки в визуальной студии, которые предоставляют возможность посылать сигнал на внутренний динамик. Я готов попытаться работать напрямую с внутренним докладчиком (я знаю, что это будет сложно, но я не идиот), я думаю, что смогу понять это с некоторыми рекомендациями), но я не могу найти никакой документации при доступе к внутреннему динамику в Windows.
EDIT: От this post я смог собрать, что большинство компьютеров в настоящее время на самом деле не имеют внутреннего динамика. Облом. Это нормально, хотя - я могу использовать подключенные акустические системы, но я до сих пор имею следующие требования:
- Мне нужно, чтобы иметь возможность определить частоту и имеет колонки играть в эту частоту, пока я не скажу им, чтобы остановить
- Я предпочел бы не использовать внешние библиотеки
EDIT 2: Вот класс, я работаю над:
#define HALF_NOTE 1.059463094359 // HALF_NOTE^12 = 2
#include <Windows.h>
#include <math.h>
class SoundEffect
{
public:
SoundEffect(){}
void Play()
{
for (int i = 0; data[i + 1] > 0; i++)
{
Beep(16 * pow(HALF_NOTE, data[i++] - 1), data[i] * 10); // (frequency of c0) * (twelfth root of 2)^(number of half steps above c0)
// Ideally, the code would look more like this (pseudocode):
// sound(16 * pow(HALF_NOTE, data[i++] - 1)); // Start playing the specified frequency
// delay(data[i] * 10);
}
// nosound();
}
int& operator[] (int location) { return data[location]; }
private:
int data[256];
};
Что-то вроде [Beep] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms679277 (v = vs.85) .aspx)? –
В тот день эти звуки не воспроизводились «прямо на звуковой карте», а из внутреннего динамика. На ПК практически не было звуковых карт, пока Паскаль больше не использовался. – Timbo
Машины больше не имеют громкоговорителей. Угадайте, почему Beep() все еще работает :) –