NSSound

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Guten Tag,
    mir stellt sich folgendes Problem:
    Ich habe Ein Programm, indem ich ein NSSound abspielen möchte, ein NSButton, der als Start und Stop-Knopf dienen soll, und ein NSProgressIndicator. Ich habe das AppKit-, QuickTime-, QTKit-Framework eingebunden (falls dies total komisch ist, ich bin neu hier und habe sogut wie keine Ahnung von obj-c).Den folgenden Code habe ich geschrieben:

    Quellcode

    1. - (IBAction)pushPlay:(id)sender {
    2. NSString* theFile = [[NSBundle mainBundle] pathForResource:@"Tones" ofType:@"m4a"];
    3. NSSound* sound = [[NSSound alloc] initWithContentsOfFile:theFile byReference:YES];
    4. if (![sound isPlaying]) {
    5. [sound play];[sender setTitle:@"Stop"];
    6. [activityPlay startAnimation:activityPlay]; //NSProgressInidicator
    7. } else {
    8. [sound stop];
    9. }
    10. }
    Alles anzeigen



    Und zum Schluss funktioniert dies auch nicht:

    Quellcode

    1. - (void) sound:(NSSound *)sound didFinishPlaying:(BOOL)finish {
    2. if (finish) {
    3. [puP setTitle:@"Start"]; //puB = pushPlay
    4. [activityPlay stopAnimation:activityPlay]; //NSProgressInidicator
    5. }
    6. }


    Ich weiß leider nicht wo der Fehler liegt.

    Ich wäre für Hilfe sehr dankbar,

    mfG

    Corjmd

    Informatiker Witz:
    Was ist der Unterschied zwischen einem introvertierten und einem extrovertierten Informatiker?

    Der extrovertierte guckt auf deine Füße! ;-)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von corjmd ()

  • Sollte so funktionieren ?

    Quellcode

    1. #import <AVFoundation/AVFoundation.h>
    2. @interface PlaySoundViewController : UIViewController <AVAudioPlayerDelegate>
    3. ..
    4. ..
    5. @end
    6. NSString *path = [[NSBundle mainBundle] pathForResource:@"bgmusic"ofType:@"m4a"];
    7. NSURL *filePath = [NSURL fileURLWithPath:path];
    8. AVAudioPlayer *mPL;
    9. NSError *mError;
    10. mPL = [[AVAudioPlayer alloc]initWithContentsOfURL:filePath error:&mError];
    11. [mPL setDelegate:self];
    12. [mPL prepareToPlay];
    13. [mPL play];
    14. - (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag
    15. {
    16. NSLog(@"FERTIG");
    17. [player release];
    18. }
    Alles anzeigen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von ramo ()

  • corjmd schrieb:

    Guten Tag,
    mir stellt sich folgendes Problem:
    Ich habe Ein Programm, indem ich ein NSSound abspielen möchte, ein NSButton, der als Start und Stop-Knopf dienen soll, und ein NSProgressIndicator. Ich habe das AppKit-, QuickTime-, QTKit-Framework eingebunden (falls dies total komisch ist, ich bin neu hier und habe sogut wie keine Ahnung von obj-c).Den folgenden Code habe ich geschrieben:

    Quellcode

    1. - (IBAction)pushPlay:(id)sender {
    2. NSString* theFile = [[NSBundle mainBundle] pathForResource:@"Tones" ofType:@"m4a"];
    3. NSSound* sound = [[NSSound alloc] initWithContentsOfFile:theFile byReference:YES];
    4. if (![sound isPlaying]) {
    5. [sound play];[sender setTitle:@"Stop"];
    6. [activityPlay startAnimation:activityPlay]; //NSProgressInidicator
    7. } else {
    8. [sound stop];
    9. }
    10. }
    Alles anzeigen



    Und zum Schluss funktioniert dies auch nicht:

    Quellcode

    1. - (void) sound:(NSSound *)sound didFinishPlaying:(BOOL)finish {
    2. if (finish) {
    3. [puP setTitle:@"Start"]; //puB = pushPlay
    4. [activityPlay stopAnimation:activityPlay]; //NSProgressInidicator
    5. }
    6. }


    Ich weiß leider nicht wo der Fehler liegt.

    Ich wäre für Hilfe sehr dankbar,

    mfG

    Corjmd


    Also eigentlich solltest Du weder Quicktime noch AVFoundation benötigen.

    Was genau funktioniert nicht?
    Alles richtig verknüpft?
    Bist Du sicher, dass Du keine Referenz brauchst?
    I would be embarrassed if they did not spy on me.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von longW ()

  • Guten Tag,
    vielen vielen Dank für die schnellen und zahlreichen Antworten.
    @reb00t
    ich habe alles richtig implementiert, zu jeder Headerdatei ein Link. Das Programm gibt mir keinerlei Fehlermeldungen

    @longW
    es funktioniert der Stop-Button und dieses Event soundDidFinishPlaying nicht. Ich kann leider nichts mir Referenz im Zusammenhang mit Programmierung anfangen.

    @ramo
    mir sagt xCode 4, dass es diese AVFroundation inkl. aller Player... nicht kennt. Ich habe auch nur Tutorials gesehen, die sich auf iOS bezogen, dieses Programm soll für Mac geschrieben werden

    Vielen Dank für Ihre Hilfe

    Informatiker Witz:
    Was ist der Unterschied zwischen einem introvertierten und einem extrovertierten Informatiker?

    Der extrovertierte guckt auf deine Füße! ;-)
  • corjmd schrieb:

    Guten Tag,
    vielen vielen Dank für die schnellen und zahlreichen Antworten.
    @reb00t
    ich habe alles richtig implementiert, zu jeder Headerdatei ein Link. Das Programm gibt mir keinerlei Fehlermeldungen

    @longW
    es funktioniert der Stop-Button und dieses Event soundDidFinishPlaying nicht. Ich kann leider nichts mir Referenz im Zusammenhang mit Programmierung anfangen.

    @ramo
    mir sagt xCode 4, dass es diese AVFroundation inkl. aller Player... nicht kennt. Ich habe auch nur Tutorials gesehen, die sich auf iOS bezogen, dieses Programm soll für Mac geschrieben werden

    Vielen Dank für Ihre Hilfe

    Dir fehlt auf jeden Fall noch:

    Quellcode

    1. [sound setDelegate: self];


    und dann bezog sich meine Frage auf den Aufruf im 'init', wo Du "YES" angibst.

    Ist Dein puP im InterfaceBuilder verknüpft?
    I would be embarrassed if they did not spy on me.
  • KaboomProjeXs schrieb:

    corjmd schrieb:

    mir sagt xCode 4, dass es diese AVFroundation inkl. aller Player... nicht kennt

    1. ließ dir die Zeile oben unter "OS X Entwicklerforum" durch!
    2. Musst du schon das Framework einbinden damit du mit dem AVFoundation überhaupt was anfangen kannst...


    Das verstehe ich jetzt nicht, warum soll er das tun?
    Es geht doch eigentlich gar nicht.
    I would be embarrassed if they did not spy on me.
  • corjmd schrieb:

    @longW
    es funktioniert der Stop-Button und dieses Event soundDidFinishPlaying nicht. Ich kann leider nichts mir Referenz im Zusammenhang mit Programmierung anfangen.

    Das kann auch nicht funktionieren, da Du in deinem Code immer wieder ein neues NSSound Objekt anlegst, sobald der Play/Stop-Button gedrückt wird (siehe Zeile 3 im folgenden Code):

    Quellcode

    1. - (IBAction)pushPlay:(id)sender {
    2. NSString* theFile = [[NSBundle mainBundle] pathForResource:@"Tones" ofType:@"m4a"];
    3. NSSound* sound = [[NSSound alloc] initWithContentsOfFile:theFile byReference:YES];
    4. if (![sound isPlaying]) {
    5. [sound play];[sender setTitle:@"Stop"];
    6. [activityPlay startAnimation:activityPlay]; //NSProgressInidicator
    7. } else {
    8. [sound stop];
    9. }
    10. }
    Alles anzeigen



    Das neue Objekt kennt natürlich nicht die Eigenschaften des bereits gestarteten Sounds.

    Ich würde das NSSound-Objekt als Instanzvariable verwenden und die pushPlay-Methode wie folgt abändern:


    Quellcode

    1. - (IBAction)pushPlay:(id)sender {
    2. if (sound == nil) {
    3. NSString* theFile = [[NSBundle mainBundle] pathForResource:@"Tones" ofType:@"m4a"];
    4. sound = [[NSSound alloc] initWithContentsOfFile:theFile byReference:YES];
    5. [sound play];[sender setTitle:@"Stop"];
    6. [activityPlay startAnimation:activityPlay]; //NSProgressInidicator
    7. } else {
    8. [sound stop];
    9. [sound release];
    10. sound = nil;
    11. [sender setTitle:@"Play"];
    12. }
    13. }
    Alles anzeigen
  • KaboomProjeXs schrieb:

    longW schrieb:

    Wenn Du mir erklärst, wie Du das von iOS auf Mac OS bringen willst, gerne.

    Auf dem Mac geht das natürlich nicht....ich hab nur den Post von ramo und die antwort auf diesen Post gelesen...
    Mein Fehler.


    Es ist nicht immer offenbsichtlich, das stimmt.
    Aber QTkit, Quicktime sind starke Indikatoren, aber eben nur, weil sich etwas von Quicktime in AVFoundation findet.
    NSSound gibt es dann aber nur auf dem Mac.
    Später hat er es dann selbst geschrieben.

    Ist halt schwer manchmal, die Kristallkugel andauernd zu putzen.
    I would be embarrassed if they did not spy on me.
  • Entschuldigung, war mein Fehler, habe nicht erkannt dass es um den MAC geht !!

    Quellcode

    1. #import <Cocoa/Cocoa.h>
    2. @interface NSSoundAppDelegate : NSObject <NSApplicationDelegate, NSSoundDelegate>
    3. {
    4. NSWindow *window;
    5. NSButton *tStart;
    6. NSButton *tStop;
    7. NSSound *mPlayer;
    8. }
    9. @property (assign) IBOutlet NSWindow *window;
    10. @property (retain) IBOutlet NSButton *tStart;
    11. @property (retain) IBOutlet NSButton *tStop;
    12. @property (retain) NSSound *mPlayer;
    13. -(IBAction)taStart:(id)sender;
    14. -(IBAction)taStop:(id)sender;
    15. @end
    16. #import "NSSoundAppDelegate.h"
    17. @implementation NSSoundAppDelegate
    18. @synthesize window, tStart, tStop, mPlayer;
    19. - (void)applicationDidFinishLaunching:(NSNotification *)aNotification
    20. {
    21. NSString *path = [[NSBundle mainBundle] pathForResource:@"firetrucksiren"ofType:@"mp3"];
    22. // NSString *path = [[NSBundle mainBundle] pathForResource:@"sirene24s"ofType:@"wav"];
    23. // NSString *path = [[NSBundle mainBundle] pathForResource:@"bgmusic"ofType:@"m4a"];
    24. NSURL *filePath = [NSURL fileURLWithPath:path];
    25. self.mPlayer = [[[NSSound alloc]initWithContentsOfURL:filePath byReference:NO]autorelease];
    26. [self.tStart setTitle:@"START PLAYER"];
    27. [self.tStop setTitle:@"STOP PLAYER"];
    28. [self.mPlayer setDelegate:self];
    29. }
    30. -(IBAction)taStart:(id)sender
    31. {
    32. if ([self.mPlayer isPlaying])
    33. {
    34. if ([[self.tStart title]isEqual:@"PAUSE"])
    35. {
    36. [self.mPlayer pause];
    37. [self.tStart setTitle:@"RESUME"];
    38. return;
    39. }
    40. else
    41. {
    42. [self.mPlayer resume];
    43. [self.tStart setTitle:@"PAUSE"];
    44. return;
    45. }
    46. }
    47. [self.mPlayer play];
    48. [self.tStart setTitle:@"PAUSE"];
    49. }
    50. -(IBAction)taStop:(id)sender
    51. {
    52. if ([self.mPlayer isPlaying])
    53. {
    54. [self.mPlayer stop];
    55. [self.tStart setTitle:@"START PLAYER"];
    56. }
    57. }
    58. - (void)sound:(NSSound *)sound didFinishPlaying:(BOOL)finishedPlaying
    59. {
    60. NSLog(@"FERTIG !");
    61. [self.tStart setTitle:@"START PLAYER"];
    62. }
    63. @end
    Alles anzeigen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von ramo ()

  • wow, ich bin begeistert. Vielen Dank für die Antworten. Es war ein gute Entscheidung sich hier anzumelden ;) 1 von 1 Frage gelöst, ein besserer Beginn geht nicht!! Der Fehler war, dass ich dass NSSound Objekt immer wieder neu erzeugt habe, deshalb besonderen Dank an PennyWise81.


    Ich freu mich auf mein nächstes Problem ;)

    Informatiker Witz:
    Was ist der Unterschied zwischen einem introvertierten und einem extrovertierten Informatiker?

    Der extrovertierte guckt auf deine Füße! ;-)
  • ... Da hab ich das erste gelöst und das zweite übersehen, das soundDidFinishPlaying funktioniert immer noch nicht!!
    nochmal mein Code

    sound = NSSound (vorher "tones")
    activityIndicator = NSProgressIndicator

    Quellcode

    1. - (void) sound:(NSSound *)sound didFinishPlaying:(BOOL)finishSound {
    2. if (finishSound) {
    3. [activityIndicator stopAnimation:activityIndicator];
    4. [pushPlayO setTitle:@"Start"];
    5. }
    6. }


    @ramo der Code sieht interessant aus, aber was ist ein NSLOG??

    Informatiker Witz:
    Was ist der Unterschied zwischen einem introvertierten und einem extrovertierten Informatiker?

    Der extrovertierte guckt auf deine Füße! ;-)