Forum: PC-Programmierung Soundkarte zeitgesteuert "dimmen"


von Paul Baumann (Gast)


Lesenswert?

Ich hoere in der Werkstatt auf dem Rechner Radio von dieser 
Internetseite:
http://www.surfmusik.de/
Mein Lieblingssender hat die unangenehme Eigenschaft, jeweils 3 Minuten
vor der vollen Stunde respektive halben Stunde die Modulation 
hochzuziehen
und mich mit der immer gleichen Reklame zuzudroehnen...:-(

Jetzt frage ich:
Ist es moeglich ein Programm zu schreiben, was im Hintergrund auf dem
Rechner laueft und die Systemzeit holt. Wenn es erkennt, dass es z.B.
8.57 Uhr ist, soll die Lautstaerke stark abgesenkt bzw. ganz 
unterdrueckt
werden, bis es 9 Uhr geworden ist. Der naechste Vorgang waere dann um
9.27 Uhr bis 9.30 Uhr.

Das Betriebssystem ist Windows XP. Ich habe vor Jahren mit Turbo-Pascal
auf dem Rechner herumgetobt, aber ob und womit sich die obige Funktion
erreichen laesst, weiss ich nicht.

MfG Paul

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Sicher geht das, wenn Du eine Programmiersprache verwendest, die 
Win32-API-Aufrufe ausführen kann.

Anzusteuern ist der Multimediamixer, hier ein Beispiel dafür in C++ 
(MFC):

http://www.codeproject.com/KB/audio-video/alexfmixer.aspx

oder hier für Freunde des .Net-Geraffels in Form von C#:

http://www.codeproject.com/KB/audio-video/AudioLib.aspx

von melt (Gast)


Lesenswert?

Falls du Turbo-Pascal kennst wäre eventuell Delphi eine Variante. Ich 
bin mir sicher schon Codeschnipsel für die Mixersteuerung unter 
www.delphipraxis.de gesehen zu haben.

von EagleUser (Gast)


Lesenswert?

Wirklich Flux wäre das mit einem netten Qt Tool...
QTime + QSound sind die gesuchten Klassen.

von Paul Baumann (Gast)


Lesenswert?

Danke für Eure Hinweise und Ratschläge. Da werde ich mich am Besten bei
Delphi umsehen; -mit dem C++ -Kram komme ich überhaupt nicht klar.

Was mich wundert ist, daß ich der Erste sein soll, der von der Reklame
geplagt so ein Programm sucht.

MfG Paul

von Sam .. (sam1994)


Lesenswert?

Wer weiß... So ein Programm schreibt man doch in 5min. Wenn noch schön 
aussehen soll vielleicht in 10.

von Paul Baumann (Gast)


Lesenswert?

Samuel schrob:
>So ein Programm schreibt man doch in 5min. Wenn noch schön
>aussehen soll vielleicht in 10.

Fein, dann schreib es mir mal in 10 Minuten; es muß noch nicht einmal
schön aussehen.
;-)

SCNR
Paul

von Christopher Schenk (Gast)


Angehängte Dateien:

Lesenswert?

War mal eben so Frei

Hoffe es klappt;)

von Christopher Schenk (Gast)


Angehängte Dateien:

Lesenswert?

Sorry Falsch!

von Εrnst B. (ernst)


Lesenswert?

Hmm... irgendwas fehlt mir ;)
1
err:module:import_dll Library mscoree.dll (which is needed by L"Z:\\var\\tmp\\Radio.exe") not found
2
err:module:LdrInitializeThunk Main exe initialization for L"Z:\\var\\tmp\\Radio.exe" failed, status c0000135

oder
1
** (Radio.exe:4824): WARNING **: The following assembly referenced from /var/tmp/Radio.exe could not be loaded:
2
     Assembly:   Microsoft.VisualBasic    (assemblyref_index=1)
3
     Version:    10.0.0.0
4
     Public Key: b03f5f7f11d50a3a
5
The assembly was not found in the Global Assembly Cache, a path listed in the MONO_PATH environment variable, or in the location of the executing assembly (/var/tmp/).
6
7
8
** (Radio.exe:4824): WARNING **: Could not load file or assembly 'Microsoft.VisualBasic, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies.

von Klaus W. (mfgkw)


Lesenswert?

Das sieht nicht schön aus, aber so war es abgemacht :-)

von Sam .. (sam1994)


Angehängte Dateien:

Lesenswert?

Sorry hab nicht mehr rein geschaut. Ich hab grad auch mal so ein 
Progrämmchen geschrieben. Weiß aber nicht ob es funktioniert, da auf 
vista64bit der Zugriff über winmm.dll da nicht funzt. Vielleicht kanns 
ja einer testen. Achja Quellcode hab ich auch beigelegt.

Darf man fragen was du mit radio machst? Bei mir springt sofort Norton 
ein. Ich führs mal auf der VM aus. Da lässt es mich wenigstens in Ruhe.
 EDIT: Also Net4 installiere ich mir nicht auf der VM. NET2.0 hab ich 
drauf mehr aber auch nicht.

von Willnich (Gast)


Lesenswert?

autohotkey geht bestimmt..

http://www.google.de/search?q=mute+schedule

von Paul Baumann (Gast)


Lesenswert?

So, jetzt bin ich dazu gekommen, die Programme von Christopher und von
Samuel zu testen:

Zunächst möchte ich mich bei Euch beiden für die Programmierarbeit
bedanken.

@Christopher
Dein Programm tut nach der Installation von einer neueren Version von
Net-Framework prima seinen Dienst. Ich habe es mit dem "künstlichen"
Verstellen der Systemzeit ausprobiert.

@Samuel
Auch Dein Programm startet, allerdings bediene ich es wohl falsch:
Ich weiß nicht, wie ich die beiden Intervalle (von Minute 57 bis
Minute 0 und von Minute 27 bis 30) darin einstellen kann.

Aber: Du hast das Programm entgegen meiner Vermutung doch geschrieben.
;-)
Es war also keine hohle Phrase von Dir.

MfG Paul

von Sam .. (sam1994)


Lesenswert?

Du stellst die Zeit einfach über Nummern Feld ein. Einmal 3 min und 
einmal 57min. Reihenfolge ist egal. Aber ich glaub das Lautstärke 
auslesen / setzen klappt nicht richtig. Ich muss mal nach einer Methode 
für Vista64bit suchen, dann debug ich mal mein prog.

von Sam .. (sam1994)


Lesenswert?

Mein Programm setzt unter Vista seine eigene Lautstärke. Wie es unter XP 
aussieht weiß ich nicht. Aber funktionieren tut es. Mal schauen wie es 
global geht. Bei dir sind es 2  Intervalle. Da hab ich wohl was 
überlesen. Aber wenn mein Programm funktionieren sollte musst du es nur 
2mal starten.
Aber ehrlich gesagt außer von Codeprojekt find ich nichts über global 
Lautstärke verändern mit vista.

von Juppi J. (juppiii)


Lesenswert?

Hallo
Na Paul,bist du zufrieden?

Wieviel Zeit haben den die Proghersteller wirklich gebraucht?
Wird oft untertrieben bei Home.

Gruß

von Christopher Schenk (Gast)


Lesenswert?

Also ich finde ein vernünftiges Programm schreibt man nicht mal eben so 
in 5 oder 10 Minuten ich für meins zwar ca 10 gebraucht aber dafür ist 
es auch übertrieben sch....


MFG

von Paul Baumann (Gast)


Lesenswert?

@Juppi
Ja, ich bin vollkommen zufrieden.

@Christopher
Das Programm tut genau das, was es soll. Wenn Du schon so gut bist, es
zu schreiben, werde ich den Teufel tun, auch noch Ansprüche zu stellen.

Ich habe zwar kein Problem, den Algorithmus dafür in Pseudocode hin-
zuschreiben, aber ich kann ihn nicht in die Syntax der "modernen"
Sprachen umsetzen. Diese objektorientierte Denkweise kriege ich nicht
mehr in meinen alten Kopf.
;-)

Nur eine Frage: Womit hast Du es geschrieben (C, C++, C#)

MfG Paul

von Christopher Schenk (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Paul,
geschrieben habe ich es mit Visual Baisic .Net mit Visual Studio 2010

Nebenbei ne neue Version;)

MFG

von Paul Baumann (Gast)


Lesenswert?

@Christopher
Aha.
In Visual Basic würde ich wahrscheinlich sogar den Quelltext im Formular 
verstehen.

Das Programm habe ich gleich getestet; -es fühlt sich als "R" in der
Taskleiste ziemlich wohl.

Danke noch einmal für Deine Taten!
:-)
MfG Paul

von Christopher Schenk (Gast)


Lesenswert?

Hier nochmal der Code:
1
Public Class Form1
2
3
    Private Const APPCOMMAND_VOLUME_MUTE As Integer = &H80000
4
    Private Const WM_APPCOMMAND As Integer = &H319
5
    Declare Function SendMessageW Lib "user32.dll" (ByVal hWnd As IntPtr, ByVal Msg As Integer, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As IntPtr
6
7
    Dim flag As Boolean
8
9
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
10
        If Now.Minute = 27 Or Now.Minute = 57 Then
11
            If Not flag Then
12
                SendMessageW(Me.Handle, WM_APPCOMMAND, Me.Handle, CType(APPCOMMAND_VOLUME_MUTE, IntPtr))
13
                flag = True
14
            End If
15
        ElseIf Now.Minute = 30 Or Now.Minute = 0 Then
16
            If flag = True Then
17
                flag = False
18
                SendMessageW(Me.Handle, WM_APPCOMMAND, Me.Handle, CType(APPCOMMAND_VOLUME_MUTE, IntPtr))
19
            End If
20
        End If
21
    End Sub
22
23
24
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
25
        Timer1.Start()
26
        Me.Visible = False
27
    End Sub
28
29
    Private Sub ToolStripMenuItem1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles ToolStripMenuItem1.Click
30
        Close()
31
    End Sub
32
End Class

Sorry für den Rechtschreibfehler es heißt natürlich Basic;)

von Paul Baumann (Gast)


Lesenswert?

Prima!
Ich hatte in VB6 angefangen, das Programm zu schreiben und habe es da
auch geschafft, mir die Minuten aus der Systemzeit zu holen.
Dafür habe ich ein Buch hier.
Aber um den Audiomixer anzusteuern muß man, wie ich herausfand die
Bibliothek "winmm.lib" irgendwie mit hineinknoten. Das gelang mir nicht.
:-(
Das VB-Net scheint sich leider sehr von VB zu unterscheiden, aber ich
werde natürlich versuchen, mich da hineinzufuchsen. Das ist nicht so
ein wildes Zeug wie C++
(==!, {} und solche Sachen)
;-)
MfG Paul

von Juppi J. (juppiii)


Lesenswert?

ja Paul, mit .Net kann man nette Sachen machen,
du wolltest ja nicht.
MfG

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.