Mikrofonpegel rausfinden

Übersicht Sonstiges Smalltalk

Neue Antwort erstellen

 

BBPro2

Betreff: Mikrofonpegel rausfinden

BeitragFr, Mai 13, 2011 19:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

kennt jemand eine möglichkeit über die winapi den pegel des mikrofons
herauszufinden ?

ozzi789

BeitragFr, Mai 13, 2011 19:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Bass DLL.

Die kann das sicherlich Wink


Grüsse
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5
 

BBPro2

BeitragFr, Mai 13, 2011 19:58
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Wink

hab mich nur an dieses forum hier gewand, da es das forum meines vertrauens ist Razz

BladeRunner

Moderator

BeitragFr, Mai 13, 2011 20:36
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Mai 13, 2011 20:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Google?
http://fmj-sf.net/
MFG
 

BBPro2

BeitragFr, Mai 13, 2011 20:57
Antworten mit Zitat
Benutzer-Profile anzeigen
yo, haste wohl recht br, war bißchen verpeilt, da abgelenkt während des postens Wink
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

BeitragMi, Mai 18, 2011 20:58
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, Mai 18, 2011 23:54
Antworten mit Zitat
Benutzer-Profile anzeigen
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

Neue Antwort erstellen


Übersicht Sonstiges Smalltalk

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group