|
Norbert.Eckhardt
|
|
Mitglied 10+
|
|
|
|
|
Registriert: 13.04.2006
|
|
Beiträge: 20
|
|
Wohnort: Duisburg
|
|
Musik adaptieren II unter W7
#2775 - 01.11.2009 08:13
|
Ändern
|
Antworten
|
Zitieren
|
|
|
Ich hab mal das MCI Tool bei mir eingebaut und es lief bisher wunderbar und fehlerlos unter XP und W7 RC. Jetzt hab ich W7 (Home) und seit dem gab es Probleme damit. Es spielte zuerst gar nicht mehr ab - blieb am Anfang einfach stehen - dann hab ich andere Codecs eingespielt (mit ffdshow lief es immer) wonach es jetzt zwar läuft aber mit einigen mp3's Probleme mit der Spieldauer erzeugt, wodurch sich der gleiche Titel immer wiederholt. Das Gleiche läuft unter XP immer noch fehlerfrei mit der gleichen mp3 Datei, wobei dann auch die Zeitanzeige von Anfang an stimmt. Es liegt wohl nicht daran das ich eine W7 Home Premium habe da das gleiche Problem unter W7 Professional auch besteht. Ist das Problem bei euch auch nachvollziehbar ? (Es ist nicht bei jeder mp3 - vermutlich hängt das mit der bitRate oder anderen mp3Faktoren zusammen.)
hier der vollständige Test Code: '-------------------------------------- ' Test MCI-Play ' #OPTION VERSION5 'für Win ab 2000
#DEBUG ERROR ON DEFSNG A-Z %CCWIN = 1 #INCLUDE "WIN32API.INC"
DECLARE FUNCTION GetTickCount LIB "KERNEL32.DLL" ALIAS "GetTickCount" () AS DWORD DECLARE FUNCTION GetShortPathName LIB "KERNEL32.DLL" ALIAS "GetShortPathNameA" (lpszLongPath AS ASCIIZ, lpszShortPath AS ASCIIZ, BYVAL cchBuffer AS LONG) AS LONG DECLARE FUNCTION waveOutGetNumDevs LIB "WINMM.DLL" ALIAS "waveOutGetNumDevs" () AS LONG DECLARE FUNCTION mciSendString LIB "WINMM.DLL" ALIAS "mciSendStringA" (lpstrCommand AS ASCIIZ, lpstrReturnString AS ASCIIZ, BYVAL uReturnLength AS DWORD, BYVAL hwndCallback AS DWORD) AS LONG
FUNCTION mciDevice AS DWORD FUNCTION = waveOutGetNumDevs END FUNCTION
FUNCTION mciOpen(filename AS ASCIIZ) AS DWORD DIM id AS DWORD DIM result AS DWORD DIM buffer AS ASCIIZ * 255 IF GetShortPathName(filename, buffer, SIZEOF(buffer)) <> 0 THEN id = GetTickCount IF UCASE$(RIGHT$(filename, 4)) = ".MP3" THEN result = mciSendString("open " & buffer & " type MPEGVideo alias " & HEX$(id, 8), "", 0, 0) ELSE result = mciSendString("open " & buffer & " alias " & HEX$(id, 8), "", 0, 0) END IF mciSendString("set " & HEX$(id, 8) & " time format ms", "", 0, 0) IF result <> 0 THEN id = 0 END IF FUNCTION = id END FUNCTION
FUNCTION mciPlay(BYVAL id AS DWORD, BYVAL repeat AS DWORD) AS DWORD DIM result AS DWORD IF ISTRUE repeat THEN result = mciSendString("play " & HEX$(id, 8) & " repeat", "", 0, 0) ELSE result = mciSendString("play " & HEX$(id, 8), "", 0, 0) END IF FUNCTION = result END FUNCTION
FUNCTION mciStop(BYVAL id AS DWORD) AS DWORD mciSendString("stop " & HEX$(id, 8), "", 0, 0) FUNCTION = mciSendString("seek " & HEX$(id, 8) & " to start", "", 0, 0) END FUNCTION
FUNCTION mciPause(BYVAL id AS DWORD) AS DWORD FUNCTION = mciSendString("stop " & HEX$(id, 8), "", 0, 0) END FUNCTION
FUNCTION mciResume(BYVAL id AS DWORD) AS DWORD FUNCTION = mciSendString("resume " & HEX$(id, 8), "", 0, 0) END FUNCTION
FUNCTION mciClose(BYREF id AS DWORD) AS DWORD FUNCTION = mciSendString("close " & HEX$(id, 8), "", 0, 0) id = 0 END FUNCTION
FUNCTION mciGetLength(BYVAL id AS DWORD) AS DWORD DIM result AS DWORD DIM length AS ASCIIZ * 16 IF mciSendString("status " & HEX$(id, 8) & " length", length, SIZEOF(length), 0) = 0 THEN result = VAL(length) FUNCTION = result END FUNCTION
FUNCTION mciSetPosition(BYVAL id AS DWORD, BYVAL position AS DWORD) AS DWORD FUNCTION = mciSendString("seek " & HEX$(id,8) & " to" & STR$(position), "", 0, 0) END FUNCTION
FUNCTION mciGetPosition(BYVAL id AS DWORD) AS DWORD DIM result AS DWORD DIM position AS ASCIIZ * 16 IF mciSendString("status " & HEX$(id, 8) & " position", position, SIZEOF(position), 0) = 0 THEN result = VAL(position) FUNCTION = result END FUNCTION
FUNCTION mciSetVolume(BYVAL id AS DWORD, BYVAL volume AS DWORD) AS DWORD FUNCTION = mciSendString("setaudio " & HEX$(id, 8) & " volume to" & STR$(volume), "", 0, 0) END FUNCTION
FUNCTION mciGetVolume(BYVAL id AS DWORD) AS DWORD DIM result AS DWORD DIM volume AS ASCIIZ * 16 IF mciSendString("status " & HEX$(id, 8) & " volume", volume, SIZEOF(volume), 0) = 0 THEN result = VAL(volume) FUNCTION = result END FUNCTION
FUNCTION mciSetLeftVolume(BYVAL id AS DWORD, BYVAL volume AS DWORD) AS DWORD FUNCTION = mciSendString("setaudio " & HEX$(id, 8) & " left volume to" & STR$(volume), "", 0, 0) END FUNCTION
FUNCTION mciSetRightVolume(BYVAL id AS DWORD, BYVAL volume AS DWORD) AS DWORD FUNCTION = mciSendString("setaudio " & HEX$(id, 8) & " right volume to" & STR$(volume), "", 0, 0) END FUNCTION
FUNCTION mciGetLeftVolume(BYVAL id AS DWORD) AS DWORD DIM result AS DWORD DIM volume AS ASCIIZ * 16 IF mciSendString("status " & HEX$(id, 8) & " left volume", volume, SIZEOF(volume), 0) = 0 THEN result = VAL(volume) FUNCTION = result END FUNCTION
FUNCTION mciGetRightVolume(BYVAL id AS DWORD) AS DWORD DIM result AS DWORD DIM volume AS ASCIIZ * 16 IF mciSendString("status " & HEX$(id, 8) & " right volume", volume, SIZEOF(volume), 0) = 0 THEN result = VAL(volume) FUNCTION = result END FUNCTION
'-------- Programm beginn FUNCTION PBMAIN () AS LONG DIM id AS DWORD IF mciDevice=0 THEN ?"No sound device found!":SLEEP 2000:GOTO exit_mci id = mciOpen("test.mp3") ' test mp3 sollte im aktuellen verzeichniss sein IF id = 0 THEN ? "Can't open file!":SLEEP 2000:GOTO exit_mci
mciPlay(id, 1)
mci_warten: g$=INKEY$:IF g$=CHR$(27) THEN mciStop(id):mciClose(id):GOTO exit_mci IF g$=" " THEN ' schnell vorspulen damit man beim testen nicht so lage warten muß mciGetposition (id) TO position& position&=position&+6000: IF position&>length&-10000 THEN position&=length&-10000 mcisetposition (id,position&) mciplay(id,position&) END IF LOCATE 7,7:? "abspielen ..> test.mp3" mciGetLength (id) TO length& mciGetposition (id) TO position& noch%=INT((length&-position&)/1000) LOCATE 9,7:?"noch "INT(noch%/60)" Minuten und "noch%-(INT(noch%/60)*60)" Sec. "
IF noch%<3 THEN 'titel ende in 2-3 Sekunden SLEEP 3000 mciStop(id):mciClose(id) ELSE SLEEP 200:GOTO mci_warten END IF
exit_mci:
END FUNCTION '------------------------------------------------
Extras:
|
|
Detlev * Wulff
|
|
Mitglied 50+
|
|
|
|
|
Registriert: 09.02.2005
|
|
Beiträge: 54
|
|
Wohnort: Schleswig-Holstein, Kiel
|
|
|
Lieber Norbert,
compiliert mit unter PB5.02CC auf XP funktioniert nur die Anzeige "Nix gefunden" und Tschüß!
Liebe Grüße aus Kiel Detlev
Extras:
|
|
Norbert.Eckhardt
|
|
Mitglied 10+
|
|
|
|
|
Registriert: 13.04.2006
|
|
Beiträge: 20
|
|
Wohnort: Duisburg
|
|
|
Heist 'Nix gefunden' jetzt 'No Sound Device' also kein MCI Gerät gefunden oder ist in der Zeile
id = mciOpen("test.mp3") ' test mp3 sollte im aktuellen verzeichniss sein
die Datei 'test.mp3' nicht gefunden worden. Test.mp3 muß natürlich im Verzeichniss vorhanden sein oder eine andere (vorhandene) mp3 statt dessen hier eintragen werden. (Hätte ich wohl vorher explizit nochmal drauf hinweisen müssen das hier eine vorhandene mp3 eingetragen werden muss.) Wie anfangs beschrieben läuft das Programm bei mir unter XP und W7 (PBCC4.04). Nur das eben bei W7 die Spieldauer nur noch bei manchen Titeln stimmt wodurch dann eben der Endlos Effekt auftritt. Ich vermute das andere mci-player unter W7 da ein vergleichbares Problem haben werden. Es wäre für mich ärgerlich wenn ich deswegen diese Funktion aus meinem Programmen wieder ausbauen müsste.
Extras:
|
|