簡體   English   中英

將錄制的音頻從iOS應用保存到MySQL數據庫

[英]Saving recorded audio from iOS app to mySQL database

我正在一個項目中,該項目通過PHP和AFNetworking從iOS應用程序將數據上傳到mySQL數據庫。 我有成功記錄音頻文件並將其保存到服務器上的文件夾並將相對路徑保存在數據庫中的代碼。 作為測試,我從它們保存的文件夾中下載了它們,並且可以在計算機上播放它們,但是當我嘗試在運行的應用程序中播放聲音時,它根本無法播放。 我也嘗試過將文件另存為不同的音頻格式,但是我不知道問題出在哪里。 我不確定這是否與我的代碼有關。 以下是我的PHP代碼:

if ((($_FILES["audio"]["type"] == "audio/mp3")
|| ($_FILES["audio"]["type"] == "audio/mp4")
|| ($_FILES["audio"]["type"] == "audio/m4a")
|| ($_FILES["audio"]["type"] == "audio/wav")
|| ($_FILES["audio"]["type"] == "audio/caf")
|| ($_FILES["audio"]["type"] == "audio/mpeg3")
|| ($_FILES["audio"]["type"] == "audio/mpeg"))

&& ($_FILES["audio"]["size"] < 1000000))
  {
  if ($_FILES["audio"]["error"] > 0)
    {
    echo "Return Code: " . $_FILES["audio"]["error"] . "<br />";
    }
  else
    {
    echo "Upload: " . $_FILES["audio"]["name"] . "<br />";
    echo "Type: " . $_FILES["audio"]["type"] . "<br />";
    echo "Size: " . ($_FILES["audio"]["size"] / 1024) . " Kb<br />";
    echo "Temp file: " . $_FILES["audio"]["tmp_name"] . "<br />";

    if (file_exists("audio/" . $_FILES["audio"]["name"]))
      {
      echo $_FILES["audio"]["name"] . " already exists. ";
      }
    else
      {
    $audio_name =  $_FILES["audio"]["name"];
      $audio_path =  "audio/$audio_name";

      move_uploaded_file($_FILES["audio"]["tmp_name"], $audio_path);

      $sql = "INSERT INTO audiotable (audiopath)  
  VALUES ('$audio_path')";
          $result = mysql_query($sql);
          if($result)
      {
            echo 'Upload successfully';
      }
      else
      {
            echo 'ERROR: Upload Failed';
      }
      }
    }
  }
else
  {
  echo "Invalid file";
  }

這是AVPlayer及其設置:

    NSArray *pathComponents = [NSArray arrayWithObjects:                              
    [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject],@"MyAudioMemo.caf", nil];
    NSURL *outputFileURL = [NSURL fileURLWithPathComponents:pathComponents];

    AVAudioSession *session = [AVAudioSession sharedInstance];
    [session setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];

    NSMutableDictionary *recordSetting = [[NSMutableDictionary alloc] init];

    [recordSetting setValue:[NSNumber numberWithInt:kAudioFormatAppleIMA4] forKey:AVFormatIDKey];
    [recordSetting setValue:[NSNumber numberWithFloat:44100.0] forKey:AVSampleRateKey];
    [recordSetting setValue:[NSNumber numberWithInt: 2] forKey:AVNumberOfChannelsKey];
    [recordSetting setValue:[NSNumber numberWithInt:AVAudioQualityMin] forKey:AVEncoderAudioQualityKey];

    recorder = [[AVAudioRecorder alloc] initWithURL:outputFileURL settings:recordSetting error:NULL];
    recorder.delegate = self;
    recorder.meteringEnabled = YES;
    [recorder prepareToRecord];

這是上傳代碼:

NSData *data = [NSData dataWithContentsOfURL:recorder.url];
int randomAudio = arc4random() % 9999999;
NSString *audioName=[NSString stringWithFormat:@"%d-audio.caf",randomAudio];
[manager POST:@"http://mywebsite.com/upload.php" parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
[formData appendPartWithFileData:audioData name:@"audio" fileName:audioName mimeType:@"audio/caf"];
    } success:^(AFHTTPRequestOperation *operation, id responseObject) {       
        NSLog(@"Success: %@", responseObject);
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"Error: %@", error);
    }];
    }

如果您有任何建議或知道問題所在,請告訴我,因為我不知道。 提前致謝!

原來我的代碼不是問題,它工作得很好! 因此,隨時使用它。 原來我的問題是不同的。 看到這篇文章: 無法從mainBundle播放MP4視頻文件

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM