Pregunta

Necesito obtener la longitud completa de un álbum que esté en un dispositivo pero no obtenga el resultado correcto. Lo que tengo es el Follwing para obtener una matriz con las canciones de un álbum:

MPMediaPropertyPredicate *albumNamePredicate = [MPMediaPropertyPredicate predicateWithValue:albumTitle
                                 forProperty: MPMediaItemPropertyAlbumTitle];
MPMediaQuery *myAlbumQuery = [[MPMediaQuery alloc] init];
[myAlbumQuery addFilterPredicate: albumNamePredicate];
songsAlbumList = [myAlbumQuery items];

Para obtener la longitud de una canción, uso esto:

NSNumber *songTrackLength = [song valueForProperty:MPMediaItemPropertyPlaybackDuration];
int minutes = floor([songTrackLength floatValue] / 60);
int seconds = trunc([songTrackLength floatValue] - minutes * 60);
TracklengthLabel.text = [NSString stringWithFormat:@"%d:%02d", minutes, seconds];

Entonces, lo anterior funciona bien, simplemente no obtengo una adición correcta de las canciones ... ¿alguna idea?

¿Fue útil?

Solución

Así que lo resolví, mi problema era que no sabía cómo hacer los cálculos correctamente con NSNumbers, no sabía que estaba buscando eso, por eso no lo pedí. Aquí está el código que se me ocurrió para calcular la longitud de un álbum en su dispositivo:

- (void)fullAlbumLength
{
    for (int i=0; i < songsAlbumList.count; i++)
    {
        if (addLength == NULL)  // addLength and addLengthNew are NSNumber variables 
        {
            addLength = [[self.albumTracksList objectAtIndex:i] valueForProperty: @"playbackDuration"];
        }
        else
        {
            addLengthNew = [[self.albumTracksList objectAtIndex:i] valueForProperty: @"playbackDuration"];
            addLength = [NSNumber numberWithFloat:([addLength floatValue] + [addLengthNew floatValue])];
        }
    }
    fullminutes = floor([addLength floatValue] / 60); // fullminutes is an int
    fullseconds = trunc([addLength floatValue] - fullminutes * 60);  // fullseconds is an int
    fullLength.text = [NSString stringWithFormat:@"%02d:%02d", fullminutes, fullseconds];
}

Espero que esto sea útil para alguien más.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top