Mikrofonpegel rausfinden
Übersicht

BBPro2Betreff: Mikrofonpegel rausfinden |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo,
kennt jemand eine möglichkeit über die winapi den pegel des mikrofons herauszufinden ? |
||
![]() |
ozzi789 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Bass DLL.
Die kann das sicherlich ![]() Grüsse |
||
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5 |
BBPro2 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hm
1. wo krieg ich die her ? 2. ist die nur für bb ? wenn ja ist das schlecht, da das projekt in java ist ![]() hab mich nur an dieses forum hier gewand, da es das forum meines vertrauens ist ![]() |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
wtf?
Junge, dann wäre es sinnig es in "Smalltalk" einzustellen mit dem Hinweis auf die Java-Sache, denn es könnte ja durchaus sein dass das einen Einfluß auf die Antworten hätte... (und den hatte es ja schon, wie die Antwort mit der bass.dll schon zeigte.) daher: ~VERSCHOBEN~ Dieser Thread passte nicht in das Forum, in dem er ursprünglich gepostet wurde. |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
Starwar |
![]() Antworten mit Zitat ![]() |
---|---|---|
Google?
http://fmj-sf.net/ MFG |
||
BBPro2 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
yo, haste wohl recht br, war bißchen verpeilt, da abgelenkt während des postens ![]() thx fürs verschieben @starwar die seite hatte ich auch schon gefunden, allerdings half mir die dokumentation auch nicht weiter, da ich das gewünschte feature nicht entdecken konnte... |
||
![]() |
Vertex |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hey,
da ich auch gerade an soetwas bastel... Also ich nutze OpenAL, auf die man mit Java mit dem Framework JWGL zugreifen kann. Code: [AUSKLAPPEN] import java.nio.IntBuffer; import java.util.ArrayList; import org.lwjgl.BufferUtils; import org.lwjgl.openal.AL10; import org.lwjgl.openal.ALC10; import org.lwjgl.openal.ALC11; import org.lwjgl.openal.ALCdevice; public class Recorder { public enum RECORD_FORMAT { MONO_8(AL10.AL_FORMAT_MONO8), MONO_16(AL10.AL_FORMAT_MONO16), STEREO_8( AL10.AL_FORMAT_STEREO8), STEREO_16(AL10.AL_FORMAT_STEREO16); public final int alFormat; private RECORD_FORMAT(final int alFormat) { this.alFormat = alFormat; } } public enum WINDOW_SIZE { WINDOW_256(256), WINDOW_512(512), WINDOW_1024(1024), WINDOW_2048(2048), WINDOW_4096( 4096), WINDOW_8192(8192); public final int size; private WINDOW_SIZE(final int size) { this.size = size; } } private static final IntBuffer tempIntBuffer = BufferUtils .createIntBuffer(1); private ALCdevice device; private RECORD_FORMAT format; private WINDOW_SIZE windowSize; public void open(String devicename, int frequency, RECORD_FORMAT format, WINDOW_SIZE windowSize) { close(); device = ALC11.alcCaptureOpenDevice(devicename, frequency, format.alFormat, windowSize.size); this.format = format; this.windowSize = windowSize; } public void close() { if (this.device != null) { stop(); ALC11.alcCaptureCloseDevice(device); } } public void start() { if (this.device != null) ALC11.alcCaptureStart(device); } public void stop() { if (this.device != null) ALC11.alcCaptureStop(device); } public int availableSamples() { if (this.device != null) { ALC10.alcGetInteger(device, ALC11.ALC_CAPTURE_SAMPLES, tempIntBuffer); return tempIntBuffer.get(0); } else return 0; } public static String[] enumerateCaptureDevices() { // Jeder Name ist null-terminiert und die Liste ist // doppelt-null-terminiert: "dev1\u0000dev2\u0000dev3\u0000\u0000" String list = ALC10.alcGetString(null, ALC11.ALC_CAPTURE_DEVICE_SPECIFIER); if (list.length() < 2 || !list.substring(list.length() - 2).equals("\u0000\u0000")) return new String[] {}; ArrayList<String> devices = new ArrayList<String>(); int startPos = 0, endPos = 0; while (list.charAt(endPos + 1) != '\u0000') { do { endPos++; } while (list.charAt(endPos) != '\u0000'); devices.add(list.substring(startPos, endPos)); startPos = endPos + 1; } return Utils.arrayListToStringArray(devices); } public static String defaultCaptureDevice() { return ALC10.alcGetString(null, ALC11.ALC_CAPTURE_DEFAULT_DEVICE_SPECIFIER); } } und die Utils.java: Code: [AUSKLAPPEN] public class Utils {
public static String[] arrayListToStringArray(ArrayList<String> list) { String[] array = new String[list.size()]; for (int i = 0; i < array.length; i++) { array[i] = list.get(i); } return array; } } An die Samples des Mikrofon kommste mit ALC11.alcCaptureSamples(ALCdevice device, ByteBuffer buffer, int samples) Ciao Olli |
||
vertex.dreamfall.at | GitHub |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
In meinem Beitrag über Audio-Recording via OpelAL zeige ich einen Weg auf, wie man an das Mikrofonsignal kommt. Nun müßte allerdings jemand diesen BlitzMax-Code in Java wandeln.
https://www.blitzforum.de/foru...33843& Im Grunde macht OpenAL fast alles von alleine und man muss nur die fertigen Bruchstücke vom Ringbuffer abholen. Um aus den Daten eine Lautstärke zu berechnen ist es wichtig, immer nur die "oberen" Wellenberge bezogen auf den Null-Pegel heranzuziehen: Beispiel: In BlitzMax gibt die OpenAL-Funktion eine Bytes-Feld zurück bei dem Werte zwischen 0 und 255 den Signalverlauf darstellen. Der Null-Pegel liegt in diesem Fall bei 128. Alle Werte über 128 sind Messpunkte einer "positiven" Halbwelle, alle unter 128 sind Messpunkte der darauffolgenden "negativen" Halbwelle. Ziehe nun von jedem Byte 128 ab und berücksichtige nur die Bytes, die anschließend noch größer als 0 sind. Laute Geräusche werden einen Peek von 127 erreichen. Leise Töne vielleicht gerade mal 40. Der Durchschnitt aus der (Summe der Werte)/(Anzahl der Werte) kann als "Lautstärke" angesehen werden. Allerdings wird hier (verfahrensbedingt) vielleicht mal gerade 80 als Maximalwert erreicht und kann daher schon für "sehr laut" stehen. Ausprobieren kanst Du das mit meiner "Hören&Sehen"-Maschine. Vielleicht hilft sie beim Verständnis: http://www.midimaster.de/downl...n_demo.exe |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group