• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
[NSSound isPlaying] fails to indicate sound termination in Lion
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[NSSound isPlaying] fails to indicate sound termination in Lion


  • Subject: [NSSound isPlaying] fails to indicate sound termination in Lion
  • From: Jay Reynolds Freeman <email@hidden>
  • Date: Sun, 22 Jul 2012 16:12:21 -0700

I have a problem with some code to monitor when a sound has finished playing; it works fine under Snow Leopard (MacOS 10.6.8) but not under Lion (MacOS 10.7.4).  Since Mountain Lion is still under nondisclosure I will not comment on its behavior there.

This has been a problem in an existing app for quite a while, but sufficiently minor that I let is slide.  I have a Mac App, "Wraith Scheme", that was built under MacOS 10.6.8, using Xcode 3.2.6.  The app has a rather feline theme, and a cute feature of it is that if you push a button labeled "meow", an image of the face of a cat appears, opens its mouth, says "meow", and then disappears.  The problem is, the *same* binary for this works just fine under Snow Leopard but not under Lion.  Here is the relevant code, with a few lines of instrumentation put in (and I will tell you what the instrumentation produces in just a moment):

        [wraithIconView setImage:wraithIconImageOM]; // "OM" means "Open Mouth".
        [self showIconViewAbruptly:YES];
        [toPlay play];
        while( [toPlay isPlaying] ) {
            NSLog(@"Still playing...");    // Instrumentation for debugging.
            usleep( 100000 );              // Instrumentation for debugging.
            ;
            }
        [wraithIconView setImage:wraithIconImage];
        [self showIconViewAbruptly:YES];

In this code, "toPlay" is an instance of NSSound initialized to an aif file that takes about half a second to play, and "showIconView abruptly" just sets the alpha of the image to 1 or 0 according to whether the argument is YES or NO.

All this works like gangbusters under 10.6.8 -- the "NSLog" prints about six times, which is consistent with the length of the sound and the 0.1-second sleep.  But under 10.7.4, The "NSLog" prints forever, or so it seems, even though the sound has played to all intents and purposes normally; that is, the kitty has said "meow" and then stopped making any sound.  Notwithstanding, my app is hung in an infinite loop.

So nominally, it looks as if possibly [NSSound isPlaying] is not correctly indicating sound termination under Lion, or perhaps the sound is actually not terminating under Lion, or who knows, maybe it is something else.

[NSSound play] is supposed to be asynchronous, so there should be no problem trying to do other things while the sound is playing.

I have several options, such as (1) rebuild the whole thing under a later XCode (I will spare you the usual litany of why I didn't do that sooner, but at the moment I am just lazy), (2) thrash randomly (try explicitly dispatching things asynchronously, or just put in something like usleep( 600000 ) with no while loop...), or (3) disable the silly button (but it's cute).  I thought I would first ask here, whether anyone had seen anything like this.  I would like to understand what is going on ...

I haven't filed a bug report on this because the Apple folks will probably quite properly tell me to go try it under something newer than Xcode 3.2.6, but I am not quite prepared to abandon 3.2.6 just yet.

I have googled and searched the forums but turned up no leads.

If anyone is terminally curious, you can download a copy of the app that exhibits this system (works under Snow Leopard, breaks under Lion) -- but without the two lines of instrumentation -- from

    http://jayreynoldsfreeman.com/My/Wraith_Scheme_(64-bit_version).html

Thank you ...

--  Jay Reynolds Freeman
---------------------
email@hidden
http://JayReynoldsFreeman.com (personal web site)





_______________________________________________

Cocoa-dev mailing list (email@hidden)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:

This email sent to email@hidden

  • Follow-Ups:
    • Re: [NSSound isPlaying] fails to indicate sound termination in Lion
      • From: Fritz Anderson <email@hidden>
  • Prev by Date: Re: 10.7 Full-Screen transition animation corrupts my UI - how to avoid?
  • Next by Date: Re: [NSSound isPlaying] fails to indicate sound termination in Lion
  • Previous by thread: Re: How to anchor a child-window to its parent top-right (or other point) while parent resizes.
  • Next by thread: Re: [NSSound isPlaying] fails to indicate sound termination in Lion
  • Index(es):
    • Date
    • Thread