Exemplo n.º 1
0
        public async Task <string> UploadAudioFileForGuild(AudioFileDto audio)
        {
            var connectionString = configuration.GetConnectionString("AzureBlobStorage");

            var blobServiceClient = new BlobServiceClient(connectionString);

            BlobContainerClient blobContainerClient;

            try
            {
                // Create container for guild
                blobContainerClient = await blobServiceClient.CreateBlobContainerAsync(audio.GuildId);
            }
            catch (RequestFailedException)
            {
                // Container exists
                blobContainerClient = blobServiceClient.GetBlobContainerClient(audio.GuildId);
            }

            // Ensure unique name
            var randomPrefix = Guid.NewGuid();

            var blobName = $"soundboard/{randomPrefix}_{audio.Name}";

            var url = blobContainerClient.Uri.ToString() + "/" + blobName;

            await blobContainerClient.UploadBlobAsync(blobName, audio.FileStream);

            return(url);
        }
Exemplo n.º 2
0
 public virtual void BuildStandardAudioFile()
 {
     AudioFileDto = new AudioFileDto()
     {
         Guid = new Guid()
     };
 }
        public IActionResult GetAudioFile(int id)
        {
            try
            {
                // find audio file
                var audioFile = _audioFileInfoRepository.GetAudioFile(id);

                if (audioFile == null)
                {
                    _logger.LogInformation($"Audio file with id: {id} wasn't found when accessing audio files.");
                    return(NotFound());
                }

                var audioFileResult = new AudioFileDto()
                {
                    Id          = audioFile.Id,
                    Filename    = audioFile.Filename,
                    Description = audioFile.Description,
                    CreatedOn   = audioFile.CreatedOn
                };

                return(Ok(audioFileResult));

                //return Ok(_mapper.Map<AudioFileDto>(audioFile); // use this line if using AutoMapper to avoid manually mapping the properties... see corresponding Pluralsight course for implementation details https://app.pluralsight.com/course-player?clipId=c55b6c06-f014-4595-bc29-603e39e3ae4e
            }
            catch (Exception ex)
            {
                _logger.LogCritical($"Exception while getting audio file with id: {id}.", ex);
                return(StatusCode(500, "A problem happened while handling your request."));
            }

            //try // use if pulling data from in-memory datastore, AudioFilesDataStore.cs
            //{
            //    // find audio file
            //    var fileToReturn = AudioFilesDataStore.Current.AudioFiles.FirstOrDefault(f => f.Id == id);

            //    if (fileToReturn == null)
            //    {
            //        _logger.LogInformation($"Audio file with id: {id} wasn't found when accessing audio files.");
            //        return NotFound();
            //    }

            //    return Ok(fileToReturn);
            //}
            //catch (Exception ex)
            //{
            //    _logger.LogCritical($"Exception while getting audio file with id: {id}.", ex);
            //    return StatusCode(500, "A problem happened while handling your request.");
            //}
        }
Exemplo n.º 4
0
        static void Main(string[] args)
        {
            var sessionApi                 = new SessionApi();
            var startSession               = new AuthRequestDto("user", 261, "password");
            var response                   = sessionApi.Login(startSession);
            var sessionId                  = response.SessionId;
            var recognizeApi               = new RecognizeApi();
            var soundBytes                 = File.ReadAllBytes("F:\\Art\\pcm\\0068_20170407_own_6944_181007-1496930080.wav");
            var audio                      = new AudioFileDto(soundBytes, "audio/x-wav");
            var recognitionRequest         = new RecognitionRequestDto(audio, "FarField");
            var recognitionRequestResponse = recognizeApi.RecognizeWords(Guid.Parse(sessionId), recognitionRequest);

            recognitionRequestResponse.ForEach(Console.WriteLine);
        }
        public IActionResult CreateAudioFile([FromBody] AudioFileForUploadDto audioFile)
        {
            if (audioFile.Description == audioFile.Filename)
            {
                ModelState.AddModelError("Description", "The provided description should be different from the file name.");
            }

            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var files = _audioFileInfoRepository.GetAudioFiles();
            //var files = AudioFilesDataStore.Current.AudioFiles; // use if pulling data from in-memory datastore, AudioFilesDataStore.cs

            // TO-DO: check that user has chosen a valid audio file
            //if (audioFile format is bad)
            //{
            //    return BadRequest();
            //}

            // demo purposes - id value determination can be improved
            var maxAudioFileId = _audioFileInfoRepository.GetAudioFiles().Max(f => f.Id); // needs improvement because persistent database should use the primary key to track and manage next ID value
            //var maxAudioFileId = AudioFilesDataStore.Current.AudioFiles.Max(f => f.Id); // use if pulling data from in-memory datastore, AudioFilesDataStore.cs

            var newAudioFile = new AudioFile() // was new AudioFileDto()
            {
                //Id = ++maxAudioFileId,
                Filename    = audioFile.Filename,
                Description = audioFile.Description,
                CreatedOn   = DateTime.Now
            };

            //var newAudioFile = _mapper.Map<Entities.AudioFile>(audioFile); // use this line if using AutoMapper to avoid manually mapping the properties... see corresponding Pluralsight course for implementation details https://app.pluralsight.com/course-player?clipId=c55b6c06-f014-4595-bc29-603e39e3ae4e

            _audioFileInfoRepository.AddAudioFile(newAudioFile);
            _audioFileInfoRepository.Save();
            //files.Add(newAudioFile); // old method to add the new audio file to the in-memory datastore

            // need to map the saved entity back to the dto so we can return the newly-saved audio file (not the entity) along with the "201 Created" status code
            var createdAudioFileToReturn = new AudioFileDto()
            {
                Id          = newAudioFile.Id,
                Filename    = newAudioFile.Filename,
                Description = newAudioFile.Description,
                CreatedOn   = newAudioFile.CreatedOn
            };

            // var createdAudioFileToReturn = _mapper.Map<Models.AudioFileDto>(newAudioFile); // use this line if using AutoMapper to avoid manually mapping the properties... see corresponding Pluralsight course for implementation details https://app.pluralsight.com/course-player?clipId=c55b6c06-f014-4595-bc29-603e39e3ae4e

            // send mail notifying of audio file upload attempt for transcription
            _mailService.Send($"Audio file uploaded for transcription - {DateTime.Now.ToShortDateString()} {DateTime.Now.ToLongTimeString()}",
                              $"Audio file was uploaded for text transcription on {DateTime.Now.ToShortDateString()} at {DateTime.Now.ToLongTimeString()}.\r\n\r\n" +
                              $"File details:\r\n" +
                              $"  Id: {newAudioFile.Id.ToString()}\r\n" +
                              $"  Filename: {newAudioFile.Filename}\r\n" +
                              $"  Description: {newAudioFile.Description}\r\n" +
                              $"  Date Created: {newAudioFile.CreatedOn.ToShortDateString()} {newAudioFile.CreatedOn.ToLongTimeString()}");

            return(CreatedAtRoute(
                       "GetAudioFile",
                       new { createdAudioFileToReturn.Id },
                       createdAudioFileToReturn));

            //return CreatedAtRoute( // old method to return a "201 Created" status code
            //    "GetAudioFile",
            //    new { newAudioFile.Id },
            //    newAudioFile);
        }