No hay sonido de repente después de usar AVAudioPlayer mucho – Ayuda

Soy un novato y probablemente estoy haciendo muchas cosas mal, por lo tanto, ¡realmente necesito tu experiencia y ayuda!

Estoy creando una aplicación de música que utiliza AVFoundation Framework. Cuando lo pruebo en mi Macbook y dispositivos iOS, en realidad funciona bastante bien al principio. Pero después de presionar 50-100 veces de diferentes botones de reproducción de audio, en un momento aleatorio, dejará de funcionar random. La aplicación no falla, pero no reproducirá ningún sonido. Realmente no pude entender por qué, por favor, amablemente ayúdeme.

Actualización (07-Jun-2013): Aquí, ahora me doy count cuál es el problema, pero no lo entiendo … dice esto en el depurador: shm_open fallado: "AppleAudioQueue.39.189049" (25) flags = 0x2 errno = 24 Por favor, amablemente ayude si es posible: o!

Aquí está mi código:

[array1 retain];[array1 retain];[array1 retain]; 
 NSBundle *bundle = [NSBundle mainBundle]; NSString *path = [bundle pathForResource:[NSString stringWithFormat:@"%@", [[Scale objectAtIndex:array1.retainCount]description]] ofType:@"mp3" inDirectory:@"Piano"]; NSURL *url = [NSURL fileURLWithPath: path]; player = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil]; [player setNumberOfLoops:0]; [player play]; 

Una razón potencial de este problema es porque estoy usando [array retain/release] y el uso de array retainCount para referirme a muchos objects diferentes. ¿Esto causaría una pérdida de memory o algo así?

Hello bbum, gracias por tu ayuda. Para su reference, aquí hay una parte de mi estúpido código … Sé que es un desastre, por favor avíseme si necesita mi explicación o más detalles:

  - (IBAction)P1C:(id)sender{ KeyCountA1 = [NSMutableArray arrayWithObjects:@"1",@"3",@"5",@"8",@"10",@"12",@"15",@"17",@"19",@"22",@"24",@"26",@"29",@"31",@"33",@"36",@"38",@"40",@"43",@"45",@"47",@"50",@"52",nil]; KeyCountA2 = [NSMutableArray arrayWithObjects:@"0",@"2",@"4",@"6",@"9",@"11",@"13",@"16",@"18",@"20",@"23",@"25",@"27",@"30",@"32",@"34",@"37",@"39",@"41",@"44",@"46",@"48",@"51",nil]; KeyCountA3 = [NSMutableArray arrayWithObjects:@"0",@"3",@"5",@"7",@"10",@"12",@"14",@"17",@"19",@"21",@"24",@"26",@"28",@"31",@"33",@"35",@"38",@"40",@"42",@"45",@"47",@"49",@"52",nil]; KeyCountA4 = [NSMutableArray arrayWithObjects:@"1",@"4",@"6",@"8",@"11",@"13",@"15",@"18",@"20",@"22",@"25",@"27",@"29",@"32",@"34",@"36",@"39",@"41",@"43",@"46",@"48",@"50",nil]; KeyCountA5 = [NSMutableArray arrayWithObjects:@"2",@"5",@"7",@"9",@"12",@"14",@"16",@"19",@"21",@"23",@"26",@"28",@"30",@"33",@"35",@"37",@"40",@"42",@"44",@"47",@"49",@"51",nil]; KeyCountA6 = [NSMutableArray arrayWithObjects:@"1",@"3",@"6",@"8",@"10",@"13",@"15",@"17",@"20",@"22",@"24",@"27",@"29",@"31",@"34",@"36",@"38",@"41",@"43",@"45",@"48",@"50",@"52",nil]; KeyCountA7 = [NSMutableArray arrayWithObjects:@"2",@"4",@"7",@"9",@"11",@"14",@"16",@"18",@"21",@"23",@"25",@"28",@"30",@"32",@"35",@"37",@"39",@"42",@"44",@"46",@"49",@"51",nil]; KeyCountC1 = [NSMutableArray arrayWithObjects:@"1",@"8",@"15",@"22",@"29",@"36",@"43",@"50",nil]; KeyCountC2 = [NSMutableArray arrayWithObjects:@"2",@"9",@"16",@"23",@"30",@"37",@"44",@"51",nil]; KeyCountC3 = [NSMutableArray arrayWithObjects:@"3",@"10",@"17",@"24",@"31",@"38",@"45",@"52",nil]; KeyCountC4 = [NSMutableArray arrayWithObjects:@"4",@"11",@"18",@"25",@"32",@"39",@"46",nil]; KeyCountC5 = [NSMutableArray arrayWithObjects:@"5",@"12",@"19",@"26",@"33",@"40",@"47",nil]; KeyCountC6 = [NSMutableArray arrayWithObjects:@"6",@"13",@"20",@"27",@"34",@"41",@"48",nil]; KeyCountC7 = [NSMutableArray arrayWithObjects:@"7",@"14",@"21",@"28",@"35",@"42",@"49",nil]; //(16-May-2013) Refering to SA&CC and use the right scles play different chords for progression (refer to //(22-May-2013) adding scales (13-120) if ((((ScaleArray.retainCount==1)||(ScaleArray.retainCount==2)||(ScaleArray.retainCount==14)||(ScaleArray.retainCount==25)||(ScaleArray.retainCount==26)||(ScaleArray.retainCount==38)||(ScaleArray.retainCount==49)||(ScaleArray.retainCount==50)||(ScaleArray.retainCount==62)||(ScaleArray.retainCount==73)||(ScaleArray.retainCount==74)||(ScaleArray.retainCount==85)||(ScaleArray.retainCount==86)||(ScaleArray.retainCount==98)||(ScaleArray.retainCount==110)||(ScaleArray.retainCount==111))&&(ChordCount.retainCount==1))|| (((ScaleArray.retainCount==3)||(ScaleArray.retainCount==4)||(ScaleArray.retainCount==15)||(ScaleArray.retainCount==16)||(ScaleArray.retainCount==27)||(ScaleArray.retainCount==28)||(ScaleArray.retainCount==39)||(ScaleArray.retainCount==40)||(ScaleArray.retainCount==51)||(ScaleArray.retainCount==52)||(ScaleArray.retainCount==63)||(ScaleArray.retainCount==64)||(ScaleArray.retainCount==75)||(ScaleArray.retainCount==76)||(ScaleArray.retainCount==87)||(ScaleArray.retainCount==88)||(ScaleArray.retainCount==99)||(ScaleArray.retainCount==100)||(ScaleArray.retainCount==112))&&(ChordCount.retainCount==7))|| (((ScaleArray.retainCount==5)||(ScaleArray.retainCount==17)||(ScaleArray.retainCount==18)||(ScaleArray.retainCount==29)||(ScaleArray.retainCount==30)||(ScaleArray.retainCount==41)||(ScaleArray.retainCount==42)||(ScaleArray.retainCount==53)||(ScaleArray.retainCount==54)||(ScaleArray.retainCount==65)||(ScaleArray.retainCount==66)||(ScaleArray.retainCount==77)||(ScaleArray.retainCount==89)||(ScaleArray.retainCount==101)||(ScaleArray.retainCount==102)||(ScaleArray.retainCount==113)||(ScaleArray.retainCount==114))&&(ChordCount.retainCount==6))|| (((ScaleArray.retainCount==6)||(ScaleArray.retainCount==7)||(ScaleArray.retainCount==19)||(ScaleArray.retainCount==31)||(ScaleArray.retainCount==43)||(ScaleArray.retainCount==55)||(ScaleArray.retainCount==67)||(ScaleArray.retainCount==68)||(ScaleArray.retainCount==78)||(ScaleArray.retainCount==79)||(ScaleArray.retainCount==90)||(ScaleArray.retainCount==91)||(ScaleArray.retainCount==103)||(ScaleArray.retainCount==115)||(ScaleArray.retainCount==116))&&(ChordCount.retainCount==5))|| (((ScaleArray.retainCount==8)||(ScaleArray.retainCount==9)|| (ScaleArray.retainCount==20)||(ScaleArray.retainCount==21)||(ScaleArray.retainCount==32)||(ScaleArray.retainCount==33)||(ScaleArray.retainCount==44)||(ScaleArray.retainCount==45)||(ScaleArray.retainCount==56)||(ScaleArray.retainCount==57)||(ScaleArray.retainCount==69)||(ScaleArray.retainCount==80)||(ScaleArray.retainCount==81)||(ScaleArray.retainCount==92)||(ScaleArray.retainCount==93)||(ScaleArray.retainCount==104)||(ScaleArray.retainCount==105)||(ScaleArray.retainCount==117))&&(ChordCount.retainCount==4))|| (((ScaleArray.retainCount==10)||(ScaleArray.retainCount==22)||(ScaleArray.retainCount==34)||(ScaleArray.retainCount==46)||(ScaleArray.retainCount==47)||(ScaleArray.retainCount==58)||(ScaleArray.retainCount==59)||(ScaleArray.retainCount==70)||(ScaleArray.retainCount==71)||(ScaleArray.retainCount==82)||(ScaleArray.retainCount==94)||(ScaleArray.retainCount==95)||(ScaleArray.retainCount==106)||(ScaleArray.retainCount==107)||(ScaleArray.retainCount==118)||(ScaleArray.retainCount==119))&&(ChordCount.retainCount==3))|| (((ScaleArray.retainCount==11)||(ScaleArray.retainCount==12)||(ScaleArray.retainCount==13)||(ScaleArray.retainCount==23)||(ScaleArray.retainCount==24)||(ScaleArray.retainCount==35)||(ScaleArray.retainCount==36)||(ScaleArray.retainCount==37)||(ScaleArray.retainCount==48)||(ScaleArray.retainCount==60)||(ScaleArray.retainCount==61)||(ScaleArray.retainCount==72)||(ScaleArray.retainCount==83)||(ScaleArray.retainCount==84)||(ScaleArray.retainCount==96)||(ScaleArray.retainCount==97)||(ScaleArray.retainCount==108)||(ScaleArray.retainCount==109)||(ScaleArray.retainCount==120))&&(ChordCount.retainCount==2))) { if ([KeyCountA2 containsObject:[NSString stringWithFormat:@"%d",array1.retainCount]])//A2 {if(array1.retainCount+1>Max){[S1S sendActionsForControlEvents:UIControlEventTouchDown];}else{[array1 retain];}} else if ([KeyCountA1 containsObject:[NSString stringWithFormat:@"%d",array1.retainCount]])//A1 {if(array1.retainCount+2>Max){[S1S sendActionsForControlEvents:UIControlEventTouchDown];}else{[array1 retain];[array1 retain];}} else if ([KeyCountC7 containsObject:[NSString stringWithFormat:@"%d",array1.retainCount]]) {if(array1.retainCount+3>Max){[S1S sendActionsForControlEvents:UIControlEventTouchDown];}else{[array1 retain];[array1 retain];[array1 retain];}}//C7 }//Phase#1 if ((((ScaleArray.retainCount==1)||(ScaleArray.retainCount==2)||(ScaleArray.retainCount==14)||(ScaleArray.retainCount==25)||(ScaleArray.retainCount==26)||(ScaleArray.retainCount==38)||(ScaleArray.retainCount==49)||(ScaleArray.retainCount==50)||(ScaleArray.retainCount==62)||(ScaleArray.retainCount==73)||(ScaleArray.retainCount==74)||(ScaleArray.retainCount==85)||(ScaleArray.retainCount==86)||(ScaleArray.retainCount==98)||(ScaleArray.retainCount==110)||(ScaleArray.retainCount==111))&&(ChordCount.retainCount==2))|| (((ScaleArray.retainCount==3)||(ScaleArray.retainCount==4)||(ScaleArray.retainCount==15)||(ScaleArray.retainCount==16)||(ScaleArray.retainCount==27)||(ScaleArray.retainCount==28)||(ScaleArray.retainCount==39)||(ScaleArray.retainCount==40)||(ScaleArray.retainCount==51)||(ScaleArray.retainCount==52)||(ScaleArray.retainCount==63)||(ScaleArray.retainCount==64)||(ScaleArray.retainCount==75)||(ScaleArray.retainCount==76)||(ScaleArray.retainCount==87)||(ScaleArray.retainCount==88)||(ScaleArray.retainCount==99)||(ScaleArray.retainCount==100)||(ScaleArray.retainCount==112))&&(ChordCount.retainCount==1))|| (((ScaleArray.retainCount==5)||(ScaleArray.retainCount==17)||(ScaleArray.retainCount==18)||(ScaleArray.retainCount==29)||(ScaleArray.retainCount==30)||(ScaleArray.retainCount==41)||(ScaleArray.retainCount==42)||(ScaleArray.retainCount==53)||(ScaleArray.retainCount==54)||(ScaleArray.retainCount==65)||(ScaleArray.retainCount==66)||(ScaleArray.retainCount==77)||(ScaleArray.retainCount==89)||(ScaleArray.retainCount==101)||(ScaleArray.retainCount==102)||(ScaleArray.retainCount==113)||(ScaleArray.retainCount==114))&&(ChordCount.retainCount==7))|| (((ScaleArray.retainCount==6)||(ScaleArray.retainCount==7)||(ScaleArray.retainCount==19)||(ScaleArray.retainCount==31)||(ScaleArray.retainCount==43)||(ScaleArray.retainCount==55)||(ScaleArray.retainCount==67)||(ScaleArray.retainCount==68)||(ScaleArray.retainCount==78)||(ScaleArray.retainCount==79)||(ScaleArray.retainCount==90)||(ScaleArray.retainCount==91)||(ScaleArray.retainCount==103)||(ScaleArray.retainCount==115)||(ScaleArray.retainCount==116))&&(ChordCount.retainCount==6))|| (((ScaleArray.retainCount==8)||(ScaleArray.retainCount==9)||(ScaleArray.retainCount==20)||(ScaleArray.retainCount==21)||(ScaleArray.retainCount==32)||(ScaleArray.retainCount==33)||(ScaleArray.retainCount==44)||(ScaleArray.retainCount==45)||(ScaleArray.retainCount==56)||(ScaleArray.retainCount==57)||(ScaleArray.retainCount==69)||(ScaleArray.retainCount==80)||(ScaleArray.retainCount==81)||(ScaleArray.retainCount==92)||(ScaleArray.retainCount==93)||(ScaleArray.retainCount==104)||(ScaleArray.retainCount==105)||(ScaleArray.retainCount==117))&&(ChordCount.retainCount==5))|| (((ScaleArray.retainCount==10)||(ScaleArray.retainCount==22)||(ScaleArray.retainCount==34)||(ScaleArray.retainCount==46)||(ScaleArray.retainCount==47)||(ScaleArray.retainCount==58)||(ScaleArray.retainCount==59)||(ScaleArray.retainCount==70)||(ScaleArray.retainCount==71)||(ScaleArray.retainCount==82)||(ScaleArray.retainCount==94)||(ScaleArray.retainCount==95)||(ScaleArray.retainCount==106)||(ScaleArray.retainCount==107)||(ScaleArray.retainCount==118)||(ScaleArray.retainCount==119))&&(ChordCount.retainCount==4))|| (((ScaleArray.retainCount==11)||(ScaleArray.retainCount==12)||(ScaleArray.retainCount==13)||(ScaleArray.retainCount==23)||(ScaleArray.retainCount==24)||(ScaleArray.retainCount==35)||(ScaleArray.retainCount==36)||(ScaleArray.retainCount==37)||(ScaleArray.retainCount==48)||(ScaleArray.retainCount==60)||(ScaleArray.retainCount==61)||(ScaleArray.retainCount==72)||(ScaleArray.retainCount==83)||(ScaleArray.retainCount==84)||(ScaleArray.retainCount==96)||(ScaleArray.retainCount==97)||(ScaleArray.retainCount==108)||(ScaleArray.retainCount==109)||(ScaleArray.retainCount==120))&&(ChordCount.retainCount==3))) { if ([KeyCountA3 containsObject:[NSString stringWithFormat:@"%d",array1.retainCount]]) {if(array1.retainCount+1>Max){[S1S sendActionsForControlEvents:UIControlEventTouchDown];}else{[array1 retain];}} else if ([KeyCountA2 containsObject:[NSString stringWithFormat:@"%d",array1.retainCount]])//A1 {if(array1.retainCount+2>Max){[S1S sendActionsForControlEvents:UIControlEventTouchDown];}else{[array1 retain];[array1 retain];}} else if ([KeyCountC1 containsObject:[NSString stringWithFormat:@"%d",array1.retainCount]]) {if(array1.retainCount+3>Max){[S1S sendActionsForControlEvents:UIControlEventTouchDown];}else{[array1 retain];[array1 retain];[array1 retain];}}//C7 }//Phase#2 

// skipped Phase # 3-7

 [ChangeScale sendActionsForControlEvents:UIControlEventTouchUpInside]; [label1 setText:[NSString stringWithFormat:@"%d = %@", array1.retainCount, [[KeyName objectAtIndex:array1.retainCount]description]]]; NSBundle *bundle = [NSBundle mainBundle]; NSString *path = [bundle pathForResource:[NSString stringWithFormat:@"%@",[[Scale objectAtIndex:array1.retainCount]description]] ofType:@"mp3" inDirectory:@"Piano"]; NSURL *url = [NSURL fileURLWithPath: path]; player = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil]; [player setNumberOfLoops:0]; [player play]; [EnableButton sendActionsForControlEvents:UIControlEventTouchUpInside]; [CCC sendActionsForControlEvents:UIControlEventTouchUpInside]; [EDCButtons sendActionsForControlEvents:UIControlEventTouchUpInside]; 

}

 *note: "Scale" and "KeyName" are arrays** enabled differently according to ScaleArray.retainCount. 

No hay suficiente código allí para decir qué podría estar sucediendo, aparte de decir que realmente necesitas revisar los conceptos básicos de la administración de la memory .

¿Tres retain s en una fila? No tiene sentido y es indicativo de adivinar sobre lo que está sucediendo.

retainCount es inútil; no lo llames http://www.whentouseretaincount.com/

¿Ha intentado ejecutar el analizador estático en su código?


Desde tu comentario puedo decir que realmente estoy haciendo todo mal. En mi código, estoy usando un número diferente de retención para representar diferentes teclas en el keyboard del piano … Porque no sé cómo usar un valor integer o un valor integer que se ejecute en todas mis funciones de IBAction

Mis disculpas, ¡eso no fue para ser duro!

Todos hicimos todo mal al mismo time. ¡El uso de retainCount para almacenar el estado de la interfaz de usuario es realmente uno de los abusos más creativos de esa API que he visto! ¡Entonces, no, definitivamente no eres estúpido, solo profundo en el path equivocado!

Parece que necesita dar un paso atrás y ver cómo se arman una aplicación. En este caso, tiene N botones individuales, cada uno de los cuales activa una acción casi idéntica. Por lo tanto, debe adjuntar algunos datos a esos botones.

Si se crean los botones en Interface Builder, puede asignar una label a cada uno. Si se crean mediante progtwigción, puede hacer lo mismo. Tanto NSButton como UIButton tienen tags, por lo que podría usar la misma solución en ambas plataforms.

Sin saber más sobre cómo se implementan los botones, es difícil ser más específico.

Creo que puedes asignar varios objects de avplayer. Después de usar, hazlo todo y también verifica el error para el jugador de la siguiente manera

nserror * error; player = [[AVAudioPlayer alloc] initWithContentsOfURL: url error: & error];

y error de logging