QTTime
Bonjour
Voilà je cherche à obtenir la duration de ma petite vidéo :
Et ds QTTime :
ben moi ce bordel j'en ai déduis qu'il fallait faire comme les NSRect etc.. etc..
Donc j'ai fais :
Vous trouvez pas que je suis un peu con ? Enfin en tout cas il me met "invalid receiver type 'void *' " à la première ligne
Si quelqu'un voit comment faire ? Merci
Voilà je cherche à obtenir la duration de ma petite vidéo :
[[[audioView movie] QTMovie] currentTime]
Et ds QTTime :
Defines the value and time scale of a time.
typedef struct { long long timeValue; long timeScale; long flags; }
ben moi ce bordel j'en ai déduis qu'il fallait faire comme les NSRect etc.. etc..
Donc j'ai fais :
QTTime testTime = [[[audioView movie] QTMovie] currentTime];<br /> NSLog(@"%f", testTime.timeValue);
Vous trouvez pas que je suis un peu con ? Enfin en tout cas il me met "invalid receiver type 'void *' " à la première ligne
Si quelqu'un voit comment faire ? Merci
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Ouille ouille ouille la confusion
[audioView movie] te renvoie un objet de type QTMovie, et un objet de type QTMovie réponds à "currentTime". Mais QTMovie n'est pas une méthode! Il te faut donc simplement écrire [[audioView movie] currentTime].
ça suffira, et ça ira déjà mieux.
Sinon, ton %f pour afficher un "long" te donnera des sueurs froides si tu ne le remplaces pas par un %ld.
Voilà
+
Chacha
[edit]
Ah, ouais, d'accord, amnesic à raison : QTMovie est aussi une méthode, mais dans la classe NSMovie, donc rien à voir. Je comprends mieux la confusion. Et pour le %lld, il a raison aussi. Donc finalement, c'est moi qui suis "grilled" ;-)
[/edit]
Sinon, "%f" c'est pour le type "float", timeValue est un "long long int" donc "%lld"
Tu peux essayer ca :
J'aimerais rendre mon app compatible Panther au moins
Quelqu'un connaà®trait un autre moyen d'afficher la duration d'une NSMovie ?
Merci pour votre aide à amnesic et chacha
Un truc du style :
_GetMovieDuration
collect2 : Id returned 1 exit status
I am debutant hein
EDIT : édité pour cause de nullité.
.
.
Il souffle comme un air de vérité en cette soirée venteuse du mois d'Août.
TimeValue est bien le temps écoulé ?
En tout cas ça reste à 0.0
Tu veux savoir quoi ?
Le moment dans lequel se trouve le film ?
Si oui, c'est GetMovieTime qu'il faut utiliser.
.
Sauf que ça plante lorsque je l'utilise
j'ai testé aussi sans le nil et même un truc fou :
<br />C'est le TimeRecord qui me chagrine, j'ai mis nil au départ car il est marqué :
La méthode QTMovie de NSMovie permet justement de récupérer ce pointeur à partir de ton objet film.
.
Extrait d'un programme:
En fait maintenant j'obtiens l'avancement en secondes
le problème c'est que je ne vois pas comment formatter ces secondes en h et min.
N'y a-t-il pas un moyen simple d'auto-convertir les secondes ?
En PHP ça existe. En C ça doit bien exister.
En fait j'ai trouvé un truc tout con
donc le compteur ne dépasse pas les 59 secondes.. Donc voilà suis sur la bonne piste je pense
Tu peux passer par les méthodes de NSCalendarDate. Le code suivant est à tester :
[tt]
int secondes;
int resultHeures;
int resultMinutes;
int resultSecondes;
// Nombre de secondes à convertir, par exemple.
secondes=8500;
// Initialiser la date de référence
NSCalendarDate *now=[NSCalendarDate calendarDate];
// Initialiser une autre date en ajoutant le nombre de secondes à la date de référence
NSCalendarDate *later=[now dateByAddingYears:0 months:0 days:0 hours:0 minutes:0 seconds:secondes];
// Faire la différence entre les deux dates en heures minutes et secondes
[later years:NULL months:NULL days:NULL hours:&resultHeures
minutes:&resultMinutes seconds:&resultSecondes sinceDate:now];
[/tt]
Moi je dirai qu'il suffit d'en créer une avec le bon nombre de secondes et de demander de l'afficher. La date on s'en fout du moment que l'heure est bonne, puisqu'on ne demandera que d'afficher l'heure...
Tu trouveras les "formatteurs" de dates (%H,%M,%S) dans ta doc, si tu veux écrire autrement ta durée qu'en "hh:mm:ss" :
file:///Developer/ADC%20Reference%20Library/Documentation/Cocoa/Conceptual/DataFormatting/Concepts/DateFormatters.html
Ceci dit la création d'un NSCalendarDate avec un nombre de secondes + grand que 59, faut tester... Mais bon a priori si ça marche avec la méthode d'Eddy ça marche avec la mienne aussi
Voilà ma soluce qui marche impec :
Pour tous ces "if" je me suis dessiner une table de vérité avec 1 = <10 0 = >9
Muhaha
Le fou.
Y'en a vraiment qui aiment se compliquer la vie...
Et au fait, même si tu voulais utiliser cette façon de faire, tu sais que "%02i" au lieu de "%i" permet directement de formatter le chiffre sur 2 caractères (c'est le "2" avant le i), en remplissant les "cases vides" par des zéros (c'est le zéro avant le "2")...
Donc NSLog(@%i ; %02i | %i ; %02i,5,5,12,12) donnera "5 ; 05 | 12 ; 12"...
Déjà ça t'aurait évité tout ces "ifs" qui se seraient simplifés en... une seule ligne !!
(Y'a vraiment des fous sur terre...)
Tout serait parfait si les choses seraient aussi simples...;)
Petit extrait de la doc pour la méthode dateWithYear:month:day:hour:minute:second:timeZone: :
[tt]
The year value must include the century (for example, 1999 instead of 99). The other values are the standard ones: 1 through 12 for months, 1 through 31 for days, 0 through 23 for hours, and 0 through 59 for both minutes and seconds.
[/tt]
Ca a le mérite de fonctionner, mais :
1) C'est lourd niveau code.
2) Côté optimisation c'est pas top.
3) Les APIs possèdent toutes les méthodes nécessaires, alors pourquoi réinventer la roue ?
le modulo 60 pour les minutes et secondes, oui, mais pour les heures, je vois pas...
M'enfin le prend pas mal, Louka, pour une fois que je peux répondre à une question Cocoa... C'était pas méchant (apparement je l'ai vexé il a pris ça au 1er degré...)
Je viens de tester, en effet ça fonctionne, les conversions s'effectuent automatiquement, moi qui m'attendait à un message d'erreur ! Une bonne chose à savoir...:)